Nginx配置https双向认证

1.      前期的准备工做:html

安装openssl和nginx的https模块nginx

cd  ~/
mkdir ssl
cd ssl
mkdir demoCA
cd demoCA
mkdir newcerts
mkdir private
touch index.txt
echo '01' > serial

2.      制做CA证书(这个是信任的起点,根证书,全部其余的证书都要通过CA的私钥签名)。算法

生成 CA私钥: ca.key浏览器

命令:openssl genrsa -des3 -out ca.key 2048

这样是生成rsa私钥,`des3`算法,openssl格式,2048位强度。`ca.key`是密钥文件名。为了生成这样的密钥,须要一个至少四位的密码。服务器

另外能够经过如下方法生成没有密码的key:session

  

openssl rsa -in ca.key -out ca_decrypted.key

 

生成 CA根证书的公钥 ca.crt测试

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

 

3.      制做网站的https证书,并用CA签名认证。网站

假设咱们须要为 test.com 域名制做证书,先生成 test.com的证书私钥 test.com.pem。加密

   命令:spa

openssl genrsa -des3 -out test.com.pem 1024

 

   生成无密码的私钥:

openssl rsa -in test.com.pem -out test.com.key

 

生成 csr 签名请求:

openssl req -new -key test.com.pem -out test.com.csr

 

这里须要输入国家,地区,组织,email等。最重要的是**common name**,能够写你的名字或者域名。若是为了 https 申请,这个必须和域名同样,即,这里要写test.com,不然会引起浏览器警报,这里能够用 *.test.com 来作泛域名证书。

最后要用CA证书进行签名:

openssl ca -policy policy_anything -days 1460 -cert ./demoCA/ca.crt -keyfile ./demoCA/ca.key -in test.com.csr -out test.com.crt

 

把 ca.crt 的内容追加到 test.com.crt后面,由于有些浏览彷佛不支持:

cat demoCA/ca.crt>> test.com.crt

 

4.      制做客户端证书(跟制做网站的证书模式同样):

准备客户端私钥:

openssl genrsa -des3 -out clent.pem 2048

 

生成客户端证书请求:
openssl req -new -key client.pem -out client-req.csr

 

CA签名客户端证书请求

openssl ca -policy policy_anything -days 1460 -cert ca.crt  -keyfile ca.key -in client-req.csr -out client.crt

 

客户端证书CRT转换为 PKCS #12格式(全称应该叫作 Personal Information Exchange,一般以 p12做为后缀):
openssl pkcs12 -export -clcerts -in client.crt -inkey client.pem -out client.p12

 

点击刚才生成的p12文件输入证书的密码将安装。

5.      nginx配置

server {
  listen 443;
  server_name test.com www.test.com;
 
  root html;
  index index.html index.htm;
 
  ssl on;                                     #开启ssl
  ssl_certificate  /PATH/TO/test.com.crt;    #服务器证书位置
  ssl_certificate_key /PATH/TO/test.com.key;  #服务器私钥
  ssl_client_certificate /home/zhangyong/key/ca.crt;     #CA证书用于验证客户端证书的合法性
 
  ssl_verify_client       on;                      #开启对客户端的验证
 
  ssl_session_timeout 5m;                        #session有效期,5分钟
 
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';       #加密算法
  ssl_prefer_server_ciphers on;
 
  location / {
    try_files $uri $uri/ =404;
  }      
}

 

6.      测试

当将一切都设置好,将 nginx启动成功后,就能够打开 IE来访问了,第一次访问,浏览器会询问双向认证时使用的证书,相似下图

 

注意:服务器和客户端的在输入common server时,不要重名

相关文章
相关标签/搜索