前言
工作中,我们用的都是从权威机构申请的SSL证书,使用起来非常方便,但也会遇到需要自建证书的需求,这里写个小笔记来记录下过程。
教程
环境:
linux,x86
创建目录
mkdir zs
cd zs
1. 根证书
1.1 创建根证书密钥文件
openssl genrsa -des3 -out root.key
提示输入密码,输入密码。
如果不想设置密码,可以通过以下方式取消密码
mv root.key xxx.key
openssl ras -in xxx.key -out root.key
rm -rf xxx.key
1.2 创建根证书的申请文件
openssl req -new -key root.key -out root.csr
这里需要输入一些信息,黄色框内的内容请认真填写。图是借用的。其他信息如Email Address,A challenge password可以不填。
1.3 创建根证书
创建一个100年的根证书。这里的签名方法不要用sha1,因为sha1已不安全,新版nginx会报错,建议用sha256。
openssl x509 -req -days 36500 -sha256 -extensions v3_ca -signkey root.key -in root.csr -out root.crt
2. 创建服务器证书
2.1 创建服务器证书密钥文件
openssl genrsa -out server.key 2048
2.2 创建服务器证书的申请文件
openssl req -new -key server.key -out server.csr
这里也会输入一些信息,黄色框内的内容请认真填写。图是借用的。
2.3 创建服务器证书
创建一个10年的服务器证书,签名方法同样用sha256。
openssl x509 -req -days 3650 -sha256 -extensions v3_req -CA root.crt -CAkey root.key -CAserial root.srl -CAcreateserial -in server.csr -out server.crt
3. 创建客户证书
客户端证书是可选内容,可以参考大佬的教程。
请参考:
openssl制作CA自签证书
证书使用
将服务器证书配置到nginx中
stream {
server {
listen 8080 ssl; # 监听端口号
proxy_connect_timeout 10s;
proxy_timeout 60s;
proxy_pass oneTcpServer;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!3DES:!ADH:!RC4:!DH:!DHE;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_certificate /usr/local/nginx/cert/server.crt;
ssl_certificate_key /usr/local/nginx/cert/server.key;
}
}
是不是忘记还有一个根证书了。某些客户端(如浏览器)默认是使用内置的权威机构的CA来认证服务器证书,而我们的服务器证书是自签名的,显然无法通过认证。我们需要把自建的根证书CA交给客户端,客户端使用此CA来认证我们的服务器证书。
后记
本人记忆力不是很好,写文章是为了学习和备忘。因不熟练MD,排版难看的话,多多包涵!有错误或想交流,可以评论或私信!