视频一区二区三区自拍_千金肉奴隷1985未删减版在线观看_国产成人黄色视频在线播放_少女免费播放片高清在线观看_国产精品v欧美精品v

證書(shū)相關(guān)QA

最新更新時(shí)間:2020.11.02 版本說(shuō)明


Q:什么是私鑰?什么是證書(shū)?

A:數(shù)字簽名通常定義了兩種運(yùn)算: 簽名和驗(yàn)簽。發(fā)送者用自己的私鑰對(duì)消息的哈希值進(jìn)行簽名,接收者用對(duì)方的公鑰進(jìn)行驗(yàn)簽。因此,在使用數(shù)字簽名時(shí),需要通信的雙方都要事先生成公鑰、私鑰,并且完成雙方的公鑰交換。其中,私鑰是只能由擁有者使用的不公開(kāi)密鑰,公鑰是可以公開(kāi)的密鑰。


由于公鑰本身并不含有擁有者的身份信息,使用時(shí)無(wú)法確認(rèn)它是真實(shí)有效的。所以需要證書(shū)認(rèn)證機(jī)構(gòu)(簡(jiǎn)稱 CA)在核實(shí)公鑰擁有者的信息后,將公鑰擁有者的身份信息(如商戶號(hào)、公司名稱等),公鑰、簽發(fā)者信息、有效期以及擴(kuò)展信息等進(jìn)行簽名,制作成“證書(shū)”。

Q:如何獲取API證書(shū)?

A:請(qǐng)參考什么是API證書(shū)?如何獲取API證書(shū)?

Q:什么是商戶證書(shū)?什么是平臺(tái)證書(shū)?

● “商戶證書(shū)”是指由商戶申請(qǐng)的,包含商戶的商戶號(hào)、公司名稱、公鑰信息的證書(shū)。

● ”平臺(tái)證書(shū)”是指由微信支付負(fù)責(zé)申請(qǐng)的,包含微信支付平臺(tái)標(biāo)識(shí)、公鑰信息的證書(shū)。


商戶在調(diào)用 API 時(shí)用自身的私鑰簽名,微信支付使用商戶證書(shū)中的公鑰來(lái)驗(yàn)簽。微信支付在響應(yīng)的報(bào)文中使用自身的私鑰簽名,商戶使用平臺(tái)證書(shū)中的公鑰來(lái)驗(yàn)簽。

Q:為什么微信支付API v3要用第三方CA的證書(shū)?

A:主要是為了符合監(jiān)管的要求,保證更高的安全級(jí)別。《中華人民共和國(guó)電子簽名法》、《金融電子認(rèn)證規(guī)范》及《非銀行支付機(jī)構(gòu)網(wǎng)絡(luò)支付業(yè)務(wù)管理辦法》中規(guī)定 “電子簽名需要第三方認(rèn)證的,由依法設(shè)立的電子認(rèn)證服務(wù)提供者提供認(rèn)證服務(wù)。”,所以需使用第三方 CA 來(lái)確保數(shù)字證書(shū)的唯一性、完整性及交易的不可抵賴性。

Q:什么是證書(shū)序列號(hào)

A:每個(gè)證書(shū)都有一個(gè)由CA頒發(fā)的唯一編號(hào),即證書(shū)序列號(hào)。

Q:如何查看證書(shū)序列號(hào)?

A:登陸商戶平臺(tái)【API安全】->【API證書(shū)】->【查看證書(shū)】,可查看商戶API證書(shū)序列號(hào)。

商戶API證書(shū)和微信支付平臺(tái)證書(shū)均可以使用第三方的證書(shū)解析工具,查看證書(shū)內(nèi)容。或者使用openssl命令行工具查看證書(shū)序列號(hào)。



$ openssl x509 -in 1900009191_20180326_cert.pem -noout -serial
serial=1DDE55AD98ED71D6EDD4A4A16996DE7B47773A8C
                                

Q:如何在程序中加載證書(shū)

A:推薦使用微信支付提供的SDK。你也可以查看下列編程語(yǔ)言的示例代碼。


    
/**
   * 獲取證書(shū)。
   *
   * @param filename 證書(shū)文件路徑  (required)
   * @return X509證書(shū)
   */
  public static X509Certificate getCertificate(String filename) throws IOException {
    InputStream fis = new FileInputStream(filename);
    BufferedInputStream bis = new BufferedInputStream(fis);

    try {
      CertificateFactory cf = CertificateFactory.getInstance("X509");
      X509Certificate cert = (X509Certificate) cf.generateCertificate(bis);
      cert.checkValidity();
      return cert;
    } catch (CertificateExpiredException e) {
      throw new RuntimeException("證書(shū)已過(guò)期", e);
    } catch (CertificateNotYetValidException e) {
      throw new RuntimeException("證書(shū)尚未生效", e);
    } catch (CertificateException e) {
      throw new RuntimeException("無(wú)效的證書(shū)文件", e);
    } finally {
      bis.close();
    }
  }
    
                 /**
                * Read certificate from file
                *
                * @param string    $filepath     PEM encoded X.509 certificate file path
                * 
                * @return resource|bool  X.509 certificate resource identifier on success or FALSE on failure
                */
                public static function getCertificate($filepath) {
                return openssl_x509_read(file_get_contents($filepath)); 

Q:為什么平臺(tái)證書(shū)只提供API下載?

A:主要是為了確保在更換平臺(tái)證書(shū)時(shí),不影響商戶使用微信支付的各種功能。以下場(chǎng)景中,微信支付會(huì)更換平臺(tái)證書(shū):


● 證書(shū)到期后,必須更換。(目前是五年)

● 證書(shū)到期前,例行更換。(每年一次)

Q:為什么平臺(tái)證書(shū)下載接口返回的平臺(tái)證書(shū)需要加密?

A:主要是為了防御“中間人攻擊”。


由于驗(yàn)證應(yīng)答報(bào)文的簽名和加密敏感信息時(shí),必須使用到平臺(tái)證書(shū)。平臺(tái)證書(shū)是商戶認(rèn)證微信支付身份時(shí)最關(guān)鍵的要素。因此,要通過(guò)簽名和加密等多重機(jī)制來(lái)保障商戶獲取的到平臺(tái)證書(shū)沒(méi)有被“中間人”篡改。


商戶在調(diào)用下載接口獲取平臺(tái)證書(shū)時(shí),應(yīng)進(jìn)行以下四步操作,以保證證書(shū)的真實(shí)性:

● 使用與平臺(tái)共享的對(duì)稱密鑰,解密報(bào)文中的證書(shū)(必須)

● 通過(guò)解密得到的證書(shū),來(lái)驗(yàn)證報(bào)文的簽名(必須)

● 使用證書(shū)查看工具,核對(duì)證書(shū)的頒發(fā)者為Tenpay.com Root CA。詳見(jiàn)如何區(qū)分API證書(shū)的類型?(強(qiáng)烈推薦)

● 通過(guò)證書(shū)信任鏈驗(yàn)證平臺(tái)證書(shū)(強(qiáng)烈推薦)

Q:如何通過(guò)證書(shū)信任鏈驗(yàn)證平臺(tái)證書(shū)?

A:下面介紹如何使用openssl工具,通過(guò)證書(shū)信任鏈驗(yàn)證平臺(tái)證書(shū)。


首先,從微信支付商戶平臺(tái)下載平臺(tái)證書(shū)信任鏈CertTrustChain.p7b,并將它轉(zhuǎn)換為pem證書(shū)格式。



openssl pkcs7 -print_certs -in CertTrustChain.p7b -inform der -out CertTrustChain.pem
                                

然后,-CAfile file 指定受信任的證書(shū),驗(yàn)證下載的平臺(tái)證書(shū)



openssl verify -verbose -CAfile ./CertTrustChain.pem ./WeChatPayPlatform.pem 
                                

Q:為什么請(qǐng)求返回“缺少平臺(tái)證書(shū)序列號(hào)”

A:商戶上送敏感信息時(shí)使用了微信支付平臺(tái)公鑰加密。為了能使用正確的密鑰解密,微信支付要求商戶在請(qǐng)求的HTTP頭部中包括證書(shū)序列號(hào),以聲明加密所用的密鑰對(duì)和平臺(tái)證書(shū)。詳見(jiàn)這里的說(shuō)明。



版本說(shuō)明

關(guān)閉
V1.0
2020.11.02
1. 證書(shū)相關(guān)QA上線

技術(shù)咨詢

文檔反饋