nginx配置ssl双向验证

修改openssl配置文件

vi /etc/pki/tls/openssl.cnf
修改以下内容:
[ policy_match ]
commonName supplied //optional

[ req_distinguished_name ]
countryName_default = XX 
stateOrProvinceName_default = XX
localityName_default = XX
0.organizationName_default = XX
organizationalUnitName_default = XX

必要的文件

touch /etc/pki/CA/index.txt
touch /etc/pki/CA/serial
echo 00 > /etc/pki/CA/serial

创建证书私钥

cd /etc/pki/CA/private
umask 077;openssl genrsa -out cakey.pem 2048

生成自签证书

cd /etc/pki/CA
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

创建服务器证书

以上步骤是生成CA证书,现在要生成nginx用的ssl证书

mkdir /usr/local/nginx/ssl //新建一个目录放证书
cd /usr/local/nginx/ssl
umask 077;openssl genrsa -out nginx.key 1024
openssl req -new -key nginx.key -out nginx.csr
openssl ca -in nginx.csr -out nginx.crt -days 3650

创建客户端证书

生成需要安装在客户端浏览器上的证书

umask 077;openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.crt -days 3650

//上面如果出现错误,可能需要重新生成index.txt
//touch /etc/pki/CA/index.txt

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

其中client.p12就是需要安装的证书了,下载到本地备用

nginx配置

vi /usr/local/nginx/conf/nginx.conf
添加https支持
server {
  listen 443;
  server_name example.com;
  index index.html;
  root /www;
  
  ssl on;
  ssl_certificate          /usr/local/nginx/ssl/nginx.crt;
  ssl_certificate_key      /usr/local/nginx/ssl/nginx.key;
  ssl_client_certificate   /etc/pki/CA/cacert.pem;
  ssl_session_timeout     5m;
  ssl_verify_client       on;
  ssl_protocols           SSLv2 SSLv3 TLSv1;
}
重启nginx
/usr/bin/nginx -s reload

这样就配置完成了,用浏览器打开https的话,chrome和firefix会提示安全问题,添加例外之后显示400错误,如下两点需要注意:

1、在执行上述命令的过程中会提示输入密码,在客户端安装证书的时候需要输入,一定不能忘记

2、如果执行的过程中有错误也会生成文件,但是ssl不会生效,所以一定要仔细阅读命令执行之后的提示