好久没有弄证书相关的,费了些劲儿,在此记录一下。
生成相关ssl证书,获得 ca.key ca.cart server.key server.crt client.key client.crt
#生成一个根秘钥
openssl genrsa -out ca.key 4096
#生成数据证书 -- 去服务商购买的也是这个(他们帮你生成后发给你)
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
# 生成 server 端的私钥 (我作为server端生成自己的秘钥)
openssl genrsa -out server.key 4096
# 生成server端的数字证书(会要求输入公司xx等信息,生成完之后还不能用,不能被认可)
openssl req -new -key server.key -out server.csr
# 把ca信息加入,生成一个10年有效期的证书(证书=自己秘钥+数字签名,可以立即你的资料被盖章,变成了证件)
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
#生成 client端证书(其实和服务端没有区别,名字不同)
openssl genrsa -out client.key 4096
openssl req -new -key client.key -out client.csr
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650
nginx配置--服务端:
server {
#标记为ssl
listen 8080 ssl;
ssl_certificate /data/software/nginxWebUI/server.crt;
ssl_certificate_key /data/software/nginxWebUI/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
#请求时颁发给客户端的数字证书
ssl_client_certificate /data/software/nginxWebUI/ca.crt;
#要求双向认证,如为off,代表接受任何请求(非我方数字签名的证书也认可,客户端只需简单代理到本https接口即可,无需多于配置)
ssl_verify_client on;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
location / {
add_header Content-Type "text/plain;charset=utf-8";
proxy_ssl_trusted_certificate /data/software/nginxWebUI/ca.crt;
return 200 "https return";
}
}
nginx配置--客户端(将https代理成http访问):
server {
listen 8081;
location / {
proxy_pass https://xxxx:xx;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
#信任服务端颁发的数字证书、与在浏览器安装一个道理
proxy_ssl_trusted_certificate /data/software/nginxWebUI/ca.crt;
proxy_ssl_certificate_key /data/software/nginxWebUI/client.key;
proxy_ssl_certificate /data/software/nginxWebUI/client.crt;
#此处为关键点,如为on则要求http也有证书
proxy_ssl_verify off;
client_max_body_size 10m;
}
}
最后,这篇文章对双向认证有更详细的解释,mark一下:https://www.cnblogs.com/xiao987334176/p/11041241.html