Nginx配置单项SSL以及双向SSL

Nginx配置示例(单向)
server {
    listen 443 ssl;
    server_name www.oldxu.com;
    index index.html index.php;
    root /code;
    ssl on;
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL;
    ssl_prefer_server_ciphers on;
    ...
}
Nginx配置双向认证

单向认证,仅仅是客户端需要检验服务端证书是否是正确的,而服务端不会检验客户端证书是否是正确的。
双向认证,指客户端验证服务器端证书,而服务器也需要通过CA的公钥证书来验证客户端证书。

双向验证的过程:
1.客户端say hello 服务端
2.服务端将证书、公钥等发给客户端
3.客户端CA验证证书,成功继续、不成功弹出选择页面
4.客户端将自己的证书和公钥发送给服务端
5.服务端验证客户端证书,如不通过直接断开连接
6.客户端告知服务端所支持的加密算法
7.服务端选择最高级别加密算法使用客户端公钥加密后发送给客户端
8.客户端收到后使用私钥解密并生成随机对称密钥key,使用服务端公钥加密发送给服务端
9.服务端使用私钥解密,获取对称密钥key
10.后续客户端与服务端使用该密钥key进行加密通信

#####服务端操作

server {
    listen 443 ssl;
    server_name www.oldxu.com;
    index index.html index.php;
    root /code;
    ssl on;
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL;
    ssl_prefer_server_ciphers on;
   
    ssl_client_certificate ca.crt; //这里的ca.crt是根证书公钥文件
    ssl_verify_client on;
    ...
}


#####客户端(浏览器)操作
如果不进行以下操作,浏览器会出现400错误。400 Bad Request(No required SSL certificate was sent)

cd /etc/pki/ca_test/client

openssl genrsa -out client.key //生成私钥文件

openssl req -new -key client.key -out client.csr //生成请求文件,填写信息需要和ca.csr中的Organization Name保持一致

openssl ca -in client.csr -cert /etc/pki/ca_test/root/ca.crt -keyfile /etc/pki/ca_test/root/ca.key -out client.crt -days 3650

//签名client.csr, 生成client.crt,此步如果出现

1.将client.key转换为pfx(p12)格式

cd /etc/pki/ca_test/client

openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx //这一步需要输入一个自定义密码,一会在windows上安装的时候要用到,需要记一下。

2.将client.pfx拷贝到windows下,双击即可安装。

```

猜你喜欢

转载自www.cnblogs.com/xuliangwei/p/11581394.html