小程序更換服務器導致ssl證書的問題


  之前公司開發的小程序已經運行很久了,當初在nginx上面配置https還是蠻簡單的,加載申請的證書就沒啥問題了,現在服務器快要到期了,先遷移到臨時服務器保證這段時間可以運行,就百度找一些教程一會就解決了,可問題來了,ios和測試工具上面都請求成功,但是安卓上面請求失敗,提示請求超時(.其實是提示錯誤)。

  當初快過年了,已經無心工作,簡單的看了一下代碼,發現請求超時是在判斷http響應code不等於200時彈出的提示,這就瞬間蒙蔽了,我在各種環境下面訪問這個接口發現接口請求都是200的響應值,也去小程序官方論壇上面求職,因為提示的誤導一直沒有找到解決辦法。

  初七上班了,這小程序(內部使用的)還不能用就影響員工了,仔細把代碼看一遍(確實寫的很爛),才發現這個提示 在success和fail都是這個提示,就在測試工具上面寫個測試接口,打印請求的響應結果,才發現問題是ssl握手失敗( request:fail ssl hand shake error ),就再把官方文檔看了一會,感覺就是tls版本的問題,微信要求tls版本需要支持1.2以及1.2以上。

  問題發現了,就找資料查看怎么讓服務器支持這個版本協議,看起來很簡單:

SSLProtocol All -SSLv2 -SSLv3    //除了v2 和 v3以外其他的都支持

  重啟apache以后,發現還是請求失敗,這就讓我懷疑人生了,難道沒有生效,找到網址查了一下

      

  這不是支持的好好的么,怎么還是握手失敗,如果ios和pc都失敗了碼,那很有可能是正式的問題,現在就只有安卓真機上面請求失敗(ssl握手失敗),這就很蛋疼了。

 

  后續看到一些人的blog上面配置apache 的https發現有的人攜帶了 SSLCACertificateFile  的路徑,有的沒攜帶,因為我記得申請的證書好像有這個文件(對應apache特有的),就試着帶上這個參數,果然,加上之后安卓上面測試就沒問題了,當初配nginx時候沒有這個文件,就一直以為不需要這個根證書。

  這里附上 apache 虛擬主機配置ssl的參數

  

<VirtualHost *:443>
DocumentRoot ".../htdocs" ServerName xxx:443
SSLEngine on
SSLCertificateFile    /etc/apache2/ssl/2_xxx.crt  
SSLCertificateKeyFile /etc/apache2/ssl/3_xxx.key  
SSLCACertificateFile  /etc/apache2/ssl/1_root_bundle.crt 
..錯誤日志目錄
...
</VirtualHost>

  

  這里提供一下解決思路

  1. 小程序上https請求失敗,先看這個https證書是否可用,用幾個瀏覽器打開這個網址看看

  2. 證書沒問題,可以看看是不是服務器的tls版本的問題(附上檢測網址 https://www.ssllabs.com/ssltest/index.html ) 

  3. 如果tls的版本也沒問題,那可以考慮是不是也和我一樣這個配置問題(缺少了根證書文件)

 


免責聲明!

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



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