使用Nginx配置实现SSL双向认证

[TOC]

使用Nginx配置实现SSL双向认证

生成CA私钥

  1. 生成CA私钥: ca.key

    openssl genrsa -out ca.key 4096
    

生成CA的数字证书

  1. 生成一个 CA的数字证书: ca.crt

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

生成server端的私钥

  1. 生成 server 端的私钥: server.key

    openssl genrsa -out server.key 4096
    

生成server端数字证书请求

  1. 生成 server 端数字证书请求: server.csr

    openssl req -new -key server.key -out server.csr
    

    注意:由于使用ip地址访问的,所以Common Name,输入ip即可。

    如果使用域名访问,那么这一步,必须是域名才行

用 CA 私钥签发 server 的数字证书

  1. 用 CA 私钥签发 server 的数字证书: server.crt
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650

生成 client 端的私钥

生成客户端的私钥与证书

  1. 生成客户端的私钥与证书: client.key
openssl genrsa -out client.key 4096

生成 client 端数字证书请求

  1. 生成 client 端数字证书请求: client.csr
openssl req -new -key client.key -out client.csr

用 CA 私钥签发 client 的数字证书

  1. 用 CA 私钥签发 client 的数字证书: client.crt
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650
  1. 查看文件
ls
ca.crt  ca.key  ca.srl  client.crt  client.csr  client.key  server.crt  server.csr  server.key

配置nginx

server {
        listen 443;
        server_name localhost;
        ssl on;
        ssl_certificate /etc/nginx/keys/server.crt;#配置证书位置
        ssl_certificate_key /etc/nginx/keys/server.key;#配置秘钥位置
        ssl_client_certificate /etc/nginx/keys/ca.crt;#双向认证
        ssl_verify_client on; #双向认证
        ssl_session_timeout 5m;
        ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #按照这个套件配置
        ssl_prefer_server_ciphers on;
        root html;
        index index.html;
        location / {
                try_files $uri $uri/ =404;
        }
}

注意:这里使用的是ip地址访问,如果使用域名访问,请修改 server_name 为域名地址

重载配置

nginx -s reload

浏览器验证

由于是双向认证,直接通过浏览器访问https地址是被告知400 Bad Request(No required SSL certificate was sent)的,需要在本机安装client证书。
windows上安装的证书需要pfx格式,也叫p12格式,生成方式如下

openssl pkcs12 -export -inkey ssl/client.key -in ssl/client.crt -out ssl/client.pfx   #执行后会提示输入密码(用于安装使用的)

然后拷到windows中双击即可进行安装,安装时会提示输入生成证书时设置的密码。
安装成功后,重启浏览器输入网址访问,浏览器可能会提示你选择证书,选择刚才安装的那个证书即可。
此时有些浏览器会提示用户该证书不受信任,地址不安全之类,这是因为我们的server证书是我们自己颁发的,而非真正的权威CA机构颁布,忽略它既可。

HTTPS实战之单向验证和双向验证

你可能感兴趣的:(使用Nginx配置实现SSL双向认证)