【原创】nginx上配置SSL双向认证的CA证书链(工具openssl)

配置SSL双向认证的CA证书链时,其中最关键的两步骤:

  1. ssl_client_certificate ca.crt# 包含证书链的ca.crt
  2. ssl_verify_depth 2# 指定双向认证客户端证书到根证书的深度,默认是1

配置如下:

# HTTPS server
#
server {
	listen       443 ssl;
	listen       8110 ssl;
	server_name  aaa.abc.com;

	ssl on;
	
	ssl_certificate      /usr/local/nginx/cert/server.crt; #配置证书位置
	ssl_certificate_key  /usr/local/nginx/cert/server.key; #配置秘钥位置

	#包含证书链的ca
	ssl_client_certificate /usr/local/nginx/cert/ca.crt; #双向认证
	#或者把ca链拆开,分成root_ca.crt和sub_ca.crt,如下(注意属性名):
	#ssl_client_certificate /usr/local/nginx/cert/sub_ca.crt; #双向认证
	#ssl_trusted_certificate /usr/local/nginx/cert/root_ca.crt; #双向认证
	ssl_verify_client on; #双向认证
	ssl_verify_depth 2; #指定双向认证客户端证书到根证书的深度,默认是1
	ssl_session_cache    shared:SSL:1m;
	ssl_session_timeout  5m;

	#ssl_ciphers  HIGH:!aNULL:!MD5;
	ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers  on;

	location / {
		root   /usr/local/abc/abc_web;
		index  index.html index.htm;
	}
	location /abcApi {
	   proxy_pass   http://aaa.abc.com:8119;
	}
}

 如果CA证书是没有证书链的话(vim打开之后可以直接查看,里面只有rootCA信息,没有subCA信息),则配置ssl_verify_depth值为1,或者直接去掉,因为默认是1。而ssl_client_certificate 值还是ca.crt,只不过这个ca.crt文件里面没有证书链。

补充:

从pfx文件导出ca证书链这样导出的ca.crt文件是root根证书和sub子证书合在一起的

openssl pkcs12 -in myssl.pfx -cacerts -nokeys -out ca.crt  

参考自:

https://blog.csdn.net/HD243608836/article/details/118528131

https://blog.csdn.net/HD243608836/article/details/118362421

你可能感兴趣的:(SSL,nginx,大厂任性挑,nginx,SSL,双向认证,CA,证书链openssl)