读书人

Nginx的客户端/服务端双向SSL证件认证

发布时间: 2012-09-19 13:43:54 作者: rapoo

Nginx的客户端/服务端双向SSL证书认证配置
1,准备工作:安装openssl和nginx(注意使用编译选项--with-http_ssl_module 支持ssl)

2,根证书

new_ca.sh 这个脚本会建立一个demoCA的目录以及根证书文件,后面都会用到做证书的签署

#!/bin/sh
/usr/local/ssl/misc/CA.sh -newca


3,服务端证书

new_server.sh 这个脚本建立服务端证书和私钥,并签署证书

#!/bin/sh
#生成密钥
openssl genrsa -des3 -out server.key 2048
#生成证书签名请求文件
openssl req -new -key server.key -out newreq.pem -days 365
#进行签证
./CA.sh -sign
#最终服务端证书
mv newcert.pem server.crt

4,客户端证书

new_client.sh 这个脚本建立客户端证书和私钥,并签署证书

#!/bin/sh
#客户端:
#生成密钥
openssl genrsa -des3 -out client.key 2048
#生成证书签名请求文件
openssl req -new -key client.key -out client.csr
#签署客户端证书
openssl ca -in client.csr -out client.crt
#创建pkcs12文件
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx


cp demoCA/cacert.pem ca.crt


在证书生成过程中需要输入一些资料,有几项是需要与根证书匹配的

countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = match



5,nginx配置

# HTTPS server
#
server {
listen 443;
server_name localhost;
# 打开ssl
ssl on;
# 服务器证书 //目录根据你生成证书时的情况决定
ssl_certificate /etc/ssl/private/server.crt;
# 服务器证书公钥
ssl_certificate_key /etc/ssl/private/server.key;
# 客户端证书签名
ssl_client_certificate /etc/ssl/private/ca.crt;
# ssl session 超时
ssl_session_timeout 5m;
# 打开SSL客户端校验 (双向证书检测)
ssl_verify_client on;

#ssl_protocols SSLv2 SSLv3 TLSv1;
#ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;

location / {
root /var/www/nginx-default;
index index.html index.htm;
}

6,浏览器配置

根据浏览器的不同,导入client.pfx

读书人网 >互联网

热点推荐