解決微信小程序要求的TLS版本必須大於等於1.2的問題


一、環境:

CentOS 6.8
nginx 1.6.0
php 7.0.10

二、背景

最近開發一個小程序,而小程序對后台接口服務器的要求是:

1、請求域名在request合法域名
2、基於 https 協議
3、TLS 版本 1.2+

1、2 兩條都滿足了,但是第三條亟待解決,導致小程序調用接口時報錯:

三、正文

(1)為什么要滿足 TLS 版本 1.2+ ?

2017年1月1日起,蘋果強制所有 app 滿足 HTTPS,即 iOS9 推出的 App Transport Security (ATS) 特性。

訪問 https://www.qcloud.com/product/ssl#userDefined10
輸入域名,檢查您的 iOS app 是否滿足 ATS 特性:

報錯了,提示不支持 TLS1.2。

(2)如何滿足 TLS 版本 1.2+ ?

1、openSSL 版本 1.0.1+

查看 openSSL 版本:

openssl version -a

2、nginx 版本為 0.7.65,0.8.19 及更高版本

查看 nginx 版本:

nginx -V

結果是,我的版本都符合要求。

(3)nginx 配置 TLS1.2

本人申請的是騰訊雲的安全證書,官方有提供 nginx 如何配置的文檔:
https://www.qcloud.com/document/product/400/6973#1.nginx-.E8.AF.81.E4.B9.A6.E9.85.8D.E7.BD.AE

配置 nginx.conf 支持 TLS1.2 的方法如下(看 ssl_protocols 參數):

server {
        listen 443;
        server_name www.domain.com; #填寫綁定證書的域名
        ssl on;
        ssl_certificate 1_www.domain.com_bundle.crt;
        ssl_certificate_key 2_www.domain.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
        ssl_prefer_server_ciphers on;
        location / {
            root   html; #站點目錄
            index  index.html index.htm;
        }
    }

四、遇到的問題

按照上文一切都做完之后,發現還是不行。

折騰好久之后。

發現,原來是 nginx 之前有配另一個 https 的 server,關於
ssl_protocols 的參數值為:

  ssl_protocols  SSLv2 SSLv3 TLSv1;

里面根本沒有包含 TLSv1.2!從而影響了我們這個 server!

所以把改成:

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

再測試:

完美。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM