一、证书生成。

1、SSL Server生成私钥/公钥对。server.key(加密)/server.pub(解密);
2、server.pub生成请求文件server.csr,包含server的一些信息,如域名/申请者/公钥等;
3、server将server.csr递交给CA,CA验证通过,用ca.key和csr加密生成server.cert;
4、server将证书server.cert传给client,client通过ca.crt解密server.cert。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

SSL交互简述及nginx双向认证配置 随笔 第1张

附证书制作流程:https://m.aliyun.com/yunqi/articles/40398

二、认证交互

SSL交互简述及nginx双向认证配置 随笔 第2张

三、SSL认证数据包分析

1、客户端请求包

SSL交互简述及nginx双向认证配置 随笔 第3张

版本信息:

SSL交互简述及nginx双向认证配置 随笔 第4张

随机数:

SSL交互简述及nginx双向认证配置 随笔 第5张

加密套件列表:

SSL交互简述及nginx双向认证配置 随笔 第6张

压缩算法和扩展参数:

SSL交互简述及nginx双向认证配置 随笔 第7张

2、服务端响应包:

SSL交互简述及nginx双向认证配置 随笔 第8张

版本号:

SSL交互简述及nginx双向认证配置 随笔 第9张

随机数:

SSL交互简述及nginx双向认证配置 随笔 第10张

选择的加密套件,压缩算法,及扩展参数:

SSL交互简述及nginx双向认证配置 随笔 第11张

证书:

SSL交互简述及nginx双向认证配置 随笔 第12张

3、客户端随机数包

SSL交互简述及nginx双向认证配置 随笔 第13张

 

SSL交互简述及nginx双向认证配置 随笔 第14张

4、通知秘钥和加密算法

SSL交互简述及nginx双向认证配置 随笔 第15张

 

SSL交互简述及nginx双向认证配置 随笔 第16张

5、握手验证消息

SSL交互简述及nginx双向认证配置 随笔 第17张

 

SSL交互简述及nginx双向认证配置 随笔 第18张

6、通知客户端加密算法与握手限制消息

 SSL交互简述及nginx双向认证配置 随笔 第19张

 

SSL交互简述及nginx双向认证配置 随笔 第20张

7、加密通信(3

SSL交互简述及nginx双向认证配置 随笔 第21张

8Encrypted AlertSSL告警,这里出现通常是提示SSL传输完成

SSL交互简述及nginx双向认证配置 随笔 第22张

 

 SSL交互简述及nginx双向认证配置 随笔 第23张

 四、nginx代理证书配置(附测试脚本)

server {
    listen 8000 ssl;
    listen[::]:8000 ssl;
    server_name *.*.*.*:8000;
    ssl on;
    ssl_certificate /home/nginx/conf/cert/ server.cert;
    ssl_certificate_key /home/nginx/conf/cert/server.key;
    ssl_client_certificate /home/nginx/conf/cert/ca.cert;
    ssl_verify_client on;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;

    ssl_protocols TLSv1.2;
    ssl_ciphers  ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
    ssl_prefer_server_ciphers on;


    error_log /var/log/nginx/error.log error;


    location / {
        proxy_ssl_certificate /home/nginx/conf/cert/client.cert;
        proxy_ssl_certificate_key /home/nginx/conf/cert/client.key;
        proxy_ssl_trusted_certificate /home/nginx/conf/cert/ca.cert;
        proxy_ssl_verify on;
proxy_ssl_session_reuse on; proxy_pass https:
//*.*.*.*:8080; } }

关于其他参数请参见:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

import httplib2

ca_cert = '/home/nginx/conf/cert/client/ca.cert'
client_key = '/home/nginx/conf/cert/client/client.key'
client_cert = '/home/nginx/conf/cert/client/client.cert'
full_url = 'https://*.*.*.*:8000/test_url'
headers = {
    'content-type': 'application/json',
    'accept': 'application/json'
}

http = httplib2.Http(timeout=120, ca_certs=ca_cert, disable_ssl_certificate_validation=False)
http.follow_all_redirects = True
http.add_certificate(client_key, client_cert, '')
resp, resp_content = http.request(full_url, method='GET', headers=headers)
print resp, resp_content

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄