微信支付 伺服器DigiCert CA 證書的安裝
如果你的伺服器上沒有內建DigiCert的根CA證書, 採用上面兩種方式驗證的過程中, 可能會碰到問題。需要你主動往作業系統或者執行環境的證書信任列表中,新增DigiCert的根證書。
為了提升相容性, 微信支付的伺服器上部署了DigiCert的交叉證書. 客戶端的執行環境中需要安裝(Baltimore CyberTrust Root.crt DigiCert Global Root CA.crt)中的任意一個, 即可。
DigiCert根CA證書相容性列表如下:
權威機構根CA證書 | 證書序列號 | 證書有效期 | Windows相容 | Java相容 | 證書下載 |
---|---|---|---|---|---|
DigiCert Global Root CA | 08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a | 2006.11.10 - 2031.11.10 | Windows 7+ | 1.6.05及以上 | |
Baltimore CyberTrust Root CA | 02:00:00:b9 | 2000.5.13 - 2025.5.13 | Windows XP及以上 | 1.4.2及以上 |
下面針對幾種主流的開發語言, 介紹如何安裝新的根證書:
1.JAVAJava使用JSSE包中的信任管理器來校驗遠端伺服器的證書是否合法, TrustStore檔案中儲存了根證書信任列表. JRE 1.4.2及以上版本自帶的TrustStore檔案(lib/security/cacerts)中均內建了DigiCert的根證書。
◆ 如果你使用的JRE版本為1.4.2及以上, 且使用預設的TrustStore檔案(lib/security/cacerts), 通常不需要做額外配置, 就能支援新的伺服器證書。
◆ 如果你使用的JRE版本低於1.4.2 , 或者在系統屬性javax.net.ssl.trustStore中指定了自定義的TrustStore, 那麼需要使用JAVA自帶的證書管理工具 Keytool匯入DigiCert的根證書. 具體的命令為:
2.C\C++使用C++開發的應用程式, 通常使用libcurl庫發起https請求, libcurl支援多種SSL\TLS引擎, 如 OpenSSL, SChanel, NSS等。
◆使用OpenSSL時, 參考如下操作:
步驟一: 檢視openssl根證書信任檔案路徑. 執行命令列 openssl version –a ,輸出結果中的 OPENSSLDIR就是根證書信任檔案路徑
$ openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Tue Mar 24 14:14:19 CST 2015
platform: linux-x86_64
options: bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/etc/pki/tls"
engines: rdrand dynamic
步驟二: 按照驗證證書的方式二配置host,然後使用以下命令列, 確認作業系統內建的根證書中, 是否支援DigiCert證書
$ openssl s_client -connect api.mch.weixin.qq.com:443 -verify_return_error -CApath $OPENSSLDIR
正常的輸出為:
depth=3 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root
verify return:1
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = GeoTrust RSA CA 2018
verify return:1
depth=0 C = CN, L = Shenzhen, O = Tencent Technology (Shenzhen) Company Limited, OU = R&D, CN = payapp.weixin.qq.com
verify return:1
CONNECTED(00000003)
---
Certificate chain
0 s:/C=CN/L=Shenzhen/O=Tencent Technology (Shenzhen) Company Limited/OU=R&D/CN=payapp.weixin.qq.com
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=GeoTrust RSA CA 2018
1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=GeoTrust RSA CA 2018
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
i:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root
缺少DigiCert根證書時, 可能輸出的錯誤資訊為:
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify error:num=20:unable to get local issuer certificate
verify return:0
CONNECTED(00000003)
---
步驟三: 安裝根證書。幾種常見的linux發行版本的操作命令如下:
◆ 使用Schannel時, 參考如下操作:
Windows系統上的libcurl使用的TLS引擎是Schannel, 根證書的匯入可以參考C#章節。
3.C#在windows伺服器上的C#開發語言或者, 通常使系統自帶Schannel(別名: Secure Channel 或者 WinSSL)發起HTTPS請求, 權威機構的根證書由Windows作業系統集中管理。
可通過以下步驟來確認作業系統中是否內建了根證書 :
步驟一: 開啟mmc(在搜尋程式中輸入mmc,然後回車)進入如下介面:
步驟二: 在”檔案”中選擇 “新增/刪除管理單元”:
步驟三: 在“新增/刪除管理單元”中選擇”證書”, 雙擊後選擇 “計算機賬戶”和”本地計算機”:
選擇證書, 點選新增:
步驟四: 點選完成後, 可以看到如下介面. 右鍵單擊”受信任的根證書頒發機構”:
步驟五: 選中查詢證書, 搜尋”證書序列號”為“08 3b e0 56 90 42 46 b1 a1 75 6a c9 59 91 c7 4a” 或者” 02 00 00 b9” 如果有結果輸出, 則表明作業系統中已經內建了DigiCert的根CA證書
如果作業系統中, 沒有內建DigiCert根CA證書的話. 可以通過以下步驟安裝:
步驟一:雙擊根證書檔案,“安裝證書”:
步驟二:在彈出證書匯入嚮導中,如右圖所示, 點選下一步:
步驟三:在“選擇證書儲存”對話方塊中選擇“受信任的根證書頒發機構”,點選確定
步驟四:點選“完成”,系統提示”匯入成功”。匯入成功後, 可以按照前面介紹方法確認系統中DigiCert根證書
原文連結:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=23_4