在Linux下如何根据域名自签发各种SSL证书,这里我们以Apache、Tomcat、Nginx为例。
openssl自签发泛域名(通配符)证书
首先要有openssl工具,如果没有那么使用如下命令安装:
1 | yum install -y openssl openssl-devel |
修改openssl.cnf配置文件
具体修改如下
1 | [root@docker02 ~]# vim /etc/pki/tls/openssl.cnf |
说明:本次我们以 *.zhangbook.com
泛域名为例。
创建根证书
1 | [root@docker02 ssl]# pwd |
当然上述的公钥制作方式需要交互式输入信息,如果不想频繁输入,那么可以使用如下命令:
1 | ## 免交互式制作CA公钥 |
subj内容详解:
1 | C = Country Name (2 letter code) |
此时的的文件有:
1 | [root@docker02 ssl]# ll |
自签发泛域名证书
操作步骤为:
- 生成域名私钥
- 生成证书签发请求文件
- 使用自签署的CA,生成域名公钥
具体如下:
1 | ### 当前目录 /root/software/ssl |
PS1:上面的Common Name 就是在这步填写 *.zhangbook.com
,表示的就是该证书支持泛域名,common name一定要在SubjectAlternativeName中包含
PS2:进行CA签名获取证书时,需要注意国家、省、单位需要与CA证书相同,否则会报异常
查看签名请求文件信息
1 | openssl req -in zhangbook.com.csr -text |
使用自签署的CA,签署zhangbook.com.crt
1 | openssl ca -in zhangbook.com.csr -md sha256 -days 36500 -out zhangbook.com.crt -cert CA.crt -keyfile CA.key -extensions v3_req -config /etc/pki/tls/openssl.cnf |
这里证书有效时间为100年。
PS1:即便是你前面是sha256的根证书和sha256的请求文件,如果这里不加 -md sha256
,那么默认是按照sha1进行签名的
PS2:在执行时,可能出现如下错误
异常问题1:
1 | Using configuration from /etc/pki/tls/openssl.cnf |
处理:这时我们创建该文件即可
1 | touch /etc/pki/CA/index.txt |
异常问题2:
然后我们继续使用 【自签署的CA,签署zhangbook.com.crt】;结果又出现新问题
1 | Using configuration from /etc/pki/tls/openssl.cnf |
处理:使用如下命令即可。表示:用来跟踪最后一次颁发证书的序列号。
1 | echo "01" > /etc/pki/CA/serial |
之后我们再次执行 【自签署的CA,签署zhangbook.com.crt 】 就正常了。详情如下:
1 | [root@docker02 ssl]# openssl ca -in zhangbook.com.csr -md sha256 -days 36500 -out zhangbook.com.crt -cert CA.crt -keyfile CA.key -extensions v3_req -config /etc/pki/tls/openssl.cnf |
说明:此时我们再看,/etc/pki/CA/index.txt
和 /etc/pki/CA/serial
文件信息。如下:
1 | [root@docker02 ~]# cat /etc/pki/CA/index.txt |
由上可知:域名签署信息已经保存到index.txt文件;并且证书序列serial文件已经更新【从01变为了02】。
PS:
- 同一个域名不能签署多次;由于签署了
*.zhangbook.com
,且已经被记录,因此不能再次被签署。除非删除该记录。 - 注意index.txt文件和serial文件的关系。serial文件内容为index.txt文件内容行数加1。
查看证书信息
1 | openssl x509 -in zhangbook.com.crt -text |
验证签发证书是否有效
1 | [root@docker02 ssl]# openssl verify -CAfile CA.crt zhangbook.com.crt |
此时的文件有:
1 | [root@docker02 ssl]# ll |
此时我们已经完成自签发证书。
证书格式转换
实际工作和生产环境中,可能需要各种各样的证书格式。下面我们将证书转换为常用的其他证书格式。
将crt转pem格式
命令如下:
1 | openssl x509 -in zhangbook.com.crt -out zhangbook.com.pem -outform PEM |
生成 p12 格式的证书
利用生成的CA根证书和服务证书的crt 和 key 文件生成 p12 文件
1 | openssl pkcs12 -export -in zhangbook.com.crt -inkey zhangbook.com.key -passin pass:CS2i1QkR -name *.zhangbook.com -chain -CAfile CA.crt -password pass:CS2i1QkR -caname *.zhangbook.com -out zhangbook.com.p12 |
PS:p12证书的password为CS2i1QkR
查看p12证书信息【keytool命令依赖于Java,因此需要先安装Java】
1 | [root@docker02 ssl]# keytool -rfc -list -keystore zhangbook.com.p12 -storetype pkcs12 |
转换 p12 证书为 jks 证书文件
使用jdk keytool工具进而生成tomcat/jboss端使用的证书文件【需要安装 Java】。
具体如下:
1 | [root@docker02 ssl]# keytool -importkeystore -srckeystore zhangbook.com.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore zhangbook.com.jks |
PS:p12证书和jks证书的密码相同,防止出现各种异常情况。
利用 jks 证书生成 cer 证书
具体如下
1 | keytool -export -alias *.zhangbook.com -keystore zhangbook.com.jks -storepass CS2i1QkR -file zhangbook.com.cer |
-storepass CS2i1QkR
为jks证书密码
利用 cer 证书文件生成 jdk 所使用的文件
具体如下
1 | keytool -import -alias *.zhangbook.com -keystore cacerts -file zhangbook.com.cer |
目前存在文件说明
1 | [root@docker02 ssl]# pwd |
SSL证书使用
修改本地Windows的hosts文件,用于域名解析
1 | 文件位置:C:\WINDOWS\System32\drivers\etc\hosts 追加如下信息 |
其中172.16.1.32为测试使用的Linux机器,后面会部署WEB服务。由于自签发的是泛域名证书,因此可以有多个二级域名。
后面访问的时候,既可以使用域名访问,也可以使用IP访问。【推荐】使用域名访问。
Apache服务的SSL证书使用
1、将Apache httpd用到的证书拷贝到指定目录
1 | [root@docker02 ssl]# pwd |
2、在Linux机器安装httpd服务并添加ssl插件
1 | yum install -y httpd |
3、在httpd添加SSL配置
1 | [root@docker02 conf.d]# pwd |
4、向VirtualHost的默认目录添加文件
1 | echo "Apache web" > /var/www/html/index.html |
5、启动httpd服务
1 | systemctl start httpd |
6、浏览器访问
1 | https://172.16.1.32/ |
7、验证完毕,停止httpd服务
1 | systemctl stop httpd |
Nginx服务的SSL证书使用
1、在Linux机器安装nginx服务
1 | yum install -y nginx |
通过 nginx -V
可见,--with-http_ssl_module
已安装。
2、将nginx用到的证书拷贝到指定目录
1 | [root@docker02 ssl]# pwd |
3、在nginx添加SSL配置
1 | [root@docker02 nginx]# pwd |
4、向WEB站点添加html文件
1 | echo "Nginx web" > /usr/share/nginx/html/index.html |
5、启动nginx服务
1 | systemctl start nginx.service |
6、浏览器访问
1 | https://www.zhangbook.com/ |
7、验证完毕,停止nginx服务
1 | systemctl stop nginx |
Tomcat服务的SSL证书使用
1、下载Tomcat。
1 | [root@docker02 App]# pwd |
2、将Tomcat用到的证书拷贝到指定目录
1 | [root@docker02 ssl]# pwd |
3、在Tomcat添加SSL配置
1 | [root@docker02 conf]# pwd |
4、向WEB站点添加html文件
1 | [root@docker02 ROOT]# pwd |
PS:原ROOT目录下的文件已移走。
5、启动Tomcat服务
1 | [root@docker02 bin]# pwd |
6、浏览器访问
1 | https://172.16.1.32/ |
7、验证完毕,停止Tomcat服务
1 | [root@docker02 bin]# pwd |