1. 程式人生 > >微信支付 伺服器DigiCert CA 證書的安裝

微信支付 伺服器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及以上

PEM格式

DER格式

Baltimore CyberTrust Root CA

02:00:00:b9

2000.5.13 - 2025.5.13

Windows XP及以上

1.4.2及以上

PEM格式

DER格式

下面針對幾種主流的開發語言, 介紹如何安裝新的根證書:

1.JAVA

Java使用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