2016-10-19 79 views
1

對不起,打開同一主題的另一個問題,但我認爲這個子問題將湮沒other one淹沒。安裝,以避免PKIX路徑建設失敗的錯誤

我遇到了上述錯誤消息,這是相當不確定的(至少對我而言)。調試輸出顯示證書已加載,然後僅顯示提到的錯誤。我使用自己的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,即使客戶端/服務器令人困惑,因爲它們都是本地協議端點。

我然後使用這些命令來產生用於客戶端和服務器的信任和密鑰庫:

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 } before(somefile.p12)

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

的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 

有沒有在我的理解一些基本的缺陷?再次,抱歉發佈兩個問題,但我開始相信我以更基本的方式做錯了事。謝謝!

回答

1

我終於找到了解決方案。我只設置調試到SSL。這是我的錯誤。我將需要將調試輸出設置爲「全部」。然後我就可以看到此錯誤消息:

產生的原因:sun.security.validator.ValidatorException:擴展的關鍵 用法不允許用於TLS服務器身份驗證

這是更爲具體的用途。要解決這個問題,的確需要將我的擴展密鑰用法更改爲:

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

非常感謝!

相關問題