簡體   English   中英

設置以避免PKIX路徑構建失敗錯誤

[英]Setup to avoid PKIX path building failed error

對不起,我用同樣的話題打開了另一個問題,但我認為這個子問題,將臃腫的另一個被遺忘。

我遇到了提到的錯誤消息,該消息是非常具體的(至少對我而言)。 調試輸出顯示證書已加載,然后僅顯示提到的錯誤。 我使用自己的CA鏈生成了測試證書:CA-> SubCA-> ClientCert

我嘗試使用SSL在同一台計算機上連接客戶端和服務器(以測試雙向協議)。

我使用以下命令生成CA證書:

openssl req -batch -x509 -config ${ROOTCA_CONFIG} -newkey rsa:2048 -sha1 -nodes -out ${ROOTCA_CERT} -outform PEM -days 7300 
openssl req -batch -config ${SUBCA_CONFIG} -newkey rsa:2048 -sha1 -nodes -out ${SUBCA_CSR} -outform PEM
openssl ca -batch -config ${ROOTCA_CONFIG} -policy signing_policy -extensions signing_req_CA -out ${SUBCA_CERT} -infiles ${SUBCA_CSR}

他們似乎很好。 令我感到困惑的唯一事情是:如果將兩個證書串聯到一個文件中,並使用該鏈進行驗證,那就很好了。 如果它嘗試僅通過subCA或根CA進行驗證,則驗證失敗。

然后,我創建我的客戶端/服務器證書:

openssl req -batch -config ${CLIENT_CONFIG} -newkey rsa:2048 -sha256 -nodes -out ${CLIENT_CSR} -outform PEM -keyout $1.key
openssl ca -batch -config ${SUBCA_CONFIG} -policy signing_policy -extensions signing_req -out ${CLIENT_CERT} -infiles ${CLIENT_CSR}

這樣,我創建了一個PKCS12文件以在我的密鑰庫中使用:

openssl pkcs12 -export -inkey ${CONNECTOR_KEY} -in ${CONNECTOR_CERT} -out ${CONNECTOR_P12}

為此,我需要兩次調用腳本,一次是針對服務器,一次是針對客戶端。 我們將它們稱為client.cert和server.cert,即使client / server令人困惑,因為它們都是本地協議端點。

然后,我使用以下命令為客戶端和服務器生成信任庫和密鑰庫:

keytool -keystore $2-truststore.jks -importcert -alias ca -file test_ca_certs/rootca.cert
keytool -keystore $2-truststore.jks -importcert -alias subca -file test_ca_certs/subca.cert
keytool -v -importkeystore -srckeystore $1 -srcstoretype PKCS12 -destkeystore $2-keystore.jks -deststoretype JKS

假設$ 2分別是客戶端和服務器(服務器-信任庫等),並且$ 1與之前的$ {CONNECTOR_P12}相同(somefile.p12)

所以現在我有了一個使用CA和SubCA的信任庫,以及一個使用PKCS12令牌的密鑰庫。 客戶端和服務器端的Truststore相同,令牌幾乎相同,但是具有不同的密鑰對,因為它們是每次生成的。

ssl調試輸出指示已加載證書:

keystore (...) has type [jks], and contains aliases [1].
***
found key for : 1
chain [0] = [
[
  Version: V3
  Subject: CN=cnname, OU=ouname, O=oname, L=location, ST=bavaria, C=DE
  Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11

  Key:  Sun RSA public key, 2048 bits
  modulus: 2999...
  public exponent: 65537
...
...
keystore has type [jks], and contains aliases [ca, subca].
adding as trusted cert:
  Subject: CN=my Root CA 2016, O=organization, C=DE
  Issuer:  CN=my Root CA 2016, O=organization, C=DE
  Algorithm: RSA; Serial number: 0xfc8239c0355555c1
  Valid from Wed Oct 19 10:14:36 CEST 2016 until Tue Oct 14 10:14:36 CEST 2036

adding as trusted cert:
  Subject: CN=my SubCA 2016, O=Fraunhofer, C=DE
  Issuer:  CN=my Root CA 2016, O=Fraunhofer, C=DE
  Algorithm: RSA; Serial number: 0x1
  Valid from Wed Oct 19 10:14:38 CEST 2016 until Thu Oct 17 10:14:38 CEST 2024

我的理解是否存在一般性缺陷? 再次,很抱歉發布兩個問題,但我開始相信我會以一種更根本的方式做錯事。 謝謝!

我終於找到了解決方案。 我僅將調試設置為SSL。 這是我的錯 我將需要將調試輸出設置為“全部”。 然后我可以看到此錯誤消息:

原因:sun.security.validator.ValidatorException:擴展密鑰用法不允許用於TLS服務器身份驗證

這更加具體。 要解決此問題,實際上我需要將擴展​​密鑰用法更改為此:

keyUsage            = digitalSignature, keyEncipherment, nonRepudiation
extendedKeyUsage    = clientAuth, serverAuth

非常感謝你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM