發表日期:2018-10 文章編輯:小燈 瀏覽次數:3941
由于我們的部分業務場景是在微信(WebView)中打開https的web頁面,在測試過程中卻發現了一個問題,在Chrome中測試完全正常的https頁面,在iOS的微信(WebView)中表現正常,但在Android中,不論是哪個版本的安卓系統,都不能正常打開頁面,要么就是一片白,要么就是直接無法打開,解決這個問題,需要在服務器上配置完整的SSL證書鏈。
之后在Android自帶的瀏覽器中測試,幾乎所有的手機都出現下面這樣的情況
證書鏈
看來Andorid的WebView不能打開頁面應該是與這有關,造成這個問題的主要原因是我們服務器配置證書的證書鏈不全造成的。
證書鏈其實就是描述證書的簽名環節,就比如是 A 頒發證書給 B ,B頒發證書給C,然后我們手里的就是證書C。當證書鏈不完整的情況下,也就是沒有描述我們手中的證書C是由誰辦法的,所以導致的瀏覽器不認為你這個證書是可信的授權證書。
每個設備中都會存有一些默認的可信的根證書,但很多CA是不使用根證書進行簽名的,而是使用中間層證書進行簽名,因為這樣做能更快的進行替換(這句可能不對,原文是 because these can be rotated more frequently)。
如果你的服務器上沒有中間件證書,這樣的結果就是你的服務器上只有你的網站的證書,客戶端的瀏覽器里只有CA的根證書,這樣就會導致證書信任鏈不全,才導致了上面那兩個截圖中的問題。這種中間層證書不全的問題多出現在移動端的瀏覽器上(就我目前看,iOS8 iOS9 都沒有出現問題,Andorid各個版本都有這個問題)。
當你服務器上的證書中的信任鏈不全的情況下,瀏覽器會認為當前的鏈接是一個不安全的,會阻止頁面的打開。
解決方案
說清楚了原因,解決問題就很簡單了,只要把我們的證書鏈補全就可以了。
從SSL證書服務商那里,你獲得的crt證書文件大概是這個樣子的:
<pre style="margin: 15px 0px; padding: 10px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; font-size: 12px; line-height: 18px; font-family: Consolas, monospace, serif; color: rgb(68, 68, 68); tab-size: 4; overflow: auto; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background: rgb(245, 245, 245);">-----BEGIN CERTIFICATE-----
# 證書內容
-----END CERTIFICATE-----
</pre>
在你補全中間層證書和根證書后,新的crt證書文件看起來是這樣的:
<pre style="margin: 15px 0px; padding: 10px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; font-size: 12px; line-height: 18px; font-family: Consolas, monospace, serif; color: rgb(68, 68, 68); tab-size: 4; overflow: auto; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background: rgb(245, 245, 245);">-----BEGIN CERTIFICATE-----
# 證書內容 1
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
# 證書內容 2
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
# 證書內容 3
-----END CERTIFICATE-----
</pre>
這里包含了你的證書,以及從你的證書向上遞歸直至根證書的全部證書,這樣就可以向瀏覽器證明你的鏈接是安全的。
補全證書鏈
比較方便的是使用這個在線的工具:
https://certificatechain.io
進入這個網站,粘貼進你的證書(只包含你的用戶證書),或者上傳你的證書,他就會給出補全后的證書文件,你只需要粘貼回你的文件或者下載覆蓋就可以了,然后在服務器上重新部署就可以解決問題。
由于這里只需要上傳證書,所以是安全的,不需要擔心不安全的問題。
如果不喜歡用在線的工具,可以使用下面這個本地的工具,PHP寫的,在命令行中運行:
Github ssl-certificate-chain-resolver
PS:
一般情況下
cert.pem 是證書
chain.pem 是證書鏈編碼
fullchain.pem 是cert.pem和chain.pem的證書集合
privkey.pem 是私鑰文件
1
日期:2018-04 瀏覽次數:6761
日期:2017-02 瀏覽次數:3435
日期:2017-09 瀏覽次數:3656
日期:2017-12 瀏覽次數:3526
日期:2018-12 瀏覽次數:4816
日期:2016-12 瀏覽次數:4582
日期:2017-07 瀏覽次數:13642
日期:2017-12 瀏覽次數:3505
日期:2018-06 瀏覽次數:4265
日期:2018-05 瀏覽次數:4444
日期:2017-12 瀏覽次數:3556
日期:2017-06 瀏覽次數:3979
日期:2018-01 瀏覽次數:3941
日期:2016-12 瀏覽次數:3908
日期:2018-08 瀏覽次數:4423
日期:2017-12 瀏覽次數:3706
日期:2016-09 瀏覽次數:6404
日期:2018-07 瀏覽次數:3206
日期:2016-12 瀏覽次數:3230
日期:2018-10 瀏覽次數:3378
日期:2018-10 瀏覽次數:3479
日期:2018-09 瀏覽次數:3577
日期:2018-02 瀏覽次數:3595
日期:2015-05 瀏覽次數:3519
日期:2018-09 瀏覽次數:3305
日期:2018-06 瀏覽次數:3433
日期:2017-02 瀏覽次數:3869
日期:2018-02 瀏覽次數:4334
日期:2018-02 瀏覽次數:4173
日期:2016-12 瀏覽次數:3571
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.