zoukankan      html  css  js  c++  java
  • Nginx配置单项SSL以及双向SSL

    Https安全协议的由来?
    在实现 HTTPS协议前,我们需要了解 SSL 协议,但其实我们现在使用的更多的是 TLS 加密通讯协议。
    那么TLS是怎么保证明文消息被加密的呢?在OSI七层模型中,应用层是http协议,那么在应用层协议之下,我们的表示层,也就是 SSL 协议所发挥作用的一层,它通过(握手、交换秘钥、告警、加密)等方式,使应用层 HTTP 协议没有感知的情况下做到了数据的安全加密。

    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下,双击即可安装。
    
  • 相关阅读:
    Mechanism of Loading Resources
    Dashboards (Android)
    Tips: compilation and creating new projects on Android 4.0
    设备方向
    【转】字符串分割(C++)
    Moving From Objective-C to C++
    Simulate android behaviors on win32
    【ybtoj高效进阶 21265】排队问题(fhq-Treap)(构造)
    【ybtoj高效进阶 21262】头文字 D(线段树)(数学)
    【ybtoj高效进阶 21261】头文字 C(单调队列优化DP)
  • 原文地址:https://www.cnblogs.com/xuliangwei/p/11581394.html
Copyright © 2011-2022 走看看