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不会生效,所以一定要仔细阅读命令执行之后的提示