0

我在生產環境中運行Solaris 10,並且我已經使用第三方Web服務與他們提供證書的ssl進行了集成。直到幾周前,他們更新了證書和網絡,並向我們提供了新證書,這一切都很順利。我將這些證書添加到Java信任庫cacerts和jssecerts,但應用程序始終因握手而失敗,因此我決定使用Open SSL進行調試。無法在Solaris 10上獲得本地發行者證書

當我嘗試使用OpenSSL時,我不斷收到錯誤「驗證返回碼:20(無法獲得本地簽發者證書)」。我在互聯網上搜索並找到了一些解決方案,例如將證書複製到目錄併爲其提供CApath選項,或將所有證書合併到一個文件中,或者僅提供CAfile的根證書。

我甚至通過複製其中的證書,像etc/certs,etc/ssl/certs,etc/sfw/openssl/certs來嘗試不同的路徑,並且我對.cert中的所有證書tyes進行了大量試驗。 pfx到.p7b,但我總是得到相同的錯誤。

示例如下共享:

/usr/sfw/bin/openssl s_client -CApath /etc/sfw/openssl/certs -connect example.hostipaddress:443 -debug 
CONNECTED(00000004) 
-- Long List of string removed to conserver space -- 
02ef - <SPACES/NULS> 
depth=1 /DC=local/DC=mgc/CN=MBTC-ENTCA1 
verify error:num=20:unable to get local issuer certificate 
verify return:0 

Certificate chain 
0 s:/C=PH/ST=Metro Manila/L=Makati City/O=Metropolitan Bank and Trust Company/OU=CID-ITSAD/CN=IOSG-XRSWEB 
    i:/DC=local/DC=mgc/CN=MBTC-ENTCA1 
1 s:/DC=local/DC=mgc/CN=MBTC-ENTCA1 
    i:/DC=local/DC=mgc/CN=MGCROOTCA 
--- 
Server certificate 
-----BEGIN CERTIFICATE----- 
MIIGmjCCBYKgAwIBAgITXgAAByoWADJYm5tc5AAEAAAHKjANBgkqhkiG9w0BAQsF 
ADBCMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxEzARBgoJkiaJk/IsZAEZFgNtZ2Mx 
FDASBgNVBAMTC01CVEMtRU5UQ0ExMB4XDTE2MDEyMzE2MTg0M1oXDTE4MDEyMjE2 
MTg0M1owgZIxCzAJBgNVBAYTAlBIMRUwEwYDVQQIEwxNZXRybyBNYW5pbGExFDAS 
BgNVBAcTC01ha2F0aSBDaXR5MSwwKgYDVQQKEyNNZXRyb3BvbGl0YW4gQmFuayBh 
bmQgVHJ1c3QgQ29tcGFueTESMBAGA1UECxMJQ0lELUlUU0FEMRQwEgYDVQQDEwtJ 
T1NHLVhSU1dFQjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM3QYlQu 
01dc/h1CekLCfzwx2LfDHZJgb/A6DwbMLlIN8mA/EH03DV6SAP/n+McBZ9Kg97a2 
zWsV3Thq9TxHx2GIrU0l3Jp0CyIC2uAWK5SzcBaLkOCks4zA/uwqNpYdVZ/wX6Yh 
iCN8OnEfKdlUCfyIT6T1P5bIWgRSH+FooYfqV4+YJyAUjF2cticoemQcOPWYNBki 
wgO938Lnyr7YfaQM2z8n4GjqPBuSJmtISb6LW0tzmBPRA5hBi0NpWN1IPjyTU8h8 
soWnu6LtfGZq/fmDQ2fvlvj2wbi4U2B6E9QhjnEDOI5vWo7f0Lxq+DXABORU+Eef 
Rk5pyoWxLfTfgq0CAwEAAaOCAzYwggMyMAsGA1UdDwQEAwIHgDBEBgkqhkiG9w0B 
CQ8ENzA1MA4GCCqGSIb3DQMCAgIAgDAOBggqhkiG9w0DBAICAIAwBwYFKw4DAgcw 
CgYIKoZIhvcNAwcwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFCAm6czc 
-----END CERTIFICATE----- 
subject=/C=PH/ST=Metro Manila/L=Makati City/O=Metropolitan Bank and Trust Company/OU=CID-ITSAD/CN=IOSG-XRSWEB 
issuer=/DC=local/DC=mgc/CN=MBTC-ENTCA1 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 3570 bytes and written 471 bytes 
--- 
New, TLSv1/SSLv3, Cipher is AES256-SHA 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : AES256-SHA 
    Session-ID: 79070000B3B0F581DDC6F732F5BAD3F384CAE1D67ADBA4AF551393A6A208C897 
    Session-ID-ctx: 
    Master-Key: D04EFCA3E85CCB6E1F80F2B74C6CF24248B693F5CDABB0355F..... 
    Key-Arg : None 
    Start Time: 1457082099 
    Timeout : 300 (sec) 
    Verify return code: 20 (unable to get local issuer certificate) 
--- 

請建議我如何解決或解決此問題。

+0

Web服務實際上是使用客戶端證書嗎?您這樣標記了您的問題,但不提及您收到的證書類型。 –

+0

是的,它的確如此。一個是Rootcertificate,命名爲:MGCROOTCA.cer,另外兩個是.er格式 –

+0

Stack Overflow是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。另請參閱[我在哪裏發佈有關Dev Ops的問題?](http://meta.stackexchange.com/q/134306)。 – jww

回答

0

如果連接需要客戶端證書,則需要使用-cert參數告知OpenSSL,如果您擁有單獨的私鑰(文件),則需要告知-key-CApath僅用於服務器證書。

+0

結果: 根@ orsapi2#在/ usr/sfw/bin中/ OpenSSL的的s_client.First -connect iosg-xrsweb:443 -cert /etc/ssl/MGCROOTCA.cer 無法從獲得證書「/etc/ssl/MGCROOTCA.cer ' 5842:error:02001002:system library:fopen:No such file or directory:/on10/build-nd/G10U11B0B/usr/src/common/openssl/crypto/bio/bss_file.c:294:fopen('/ etc/ssl/MGCROOTCA.cer','r') 5842:error:20074002:BIO例程:FILE_CTRL:system lib:/ on10/build -nd/G10U11B0B/usr/src/common/openssl/crypto/bio/bss_file .c:296: 5842:錯誤:140AD002:SSL例程:SSL_CTX_use_certificate_file:系統庫:../../../../ common/openssl/ssl/ssl_rsa.c:515: –

+0

我想'MGCROOTCA。 cer'是服務器根證書,而不是客戶端證書,對嗎?你應該確保涉及的所有證書都是PEM格式(文本,以'----- BEGIN CERTIFICATE -----'開始)。 –

0

您正在使用的MGCROOTCA一個通用名稱缺少發行人CA:

/usr/sfw/bin/openssl s_client -CApath /etc/sfw/openssl/certs -connect example.hostipaddress:443 -debug 
CONNECTED(00000004) 
... 
depth=1 /DC=local/DC=mgc/CN=MBTC-ENTCA1 
verify error:num=20:unable to get local issuer certificate 
verify return:0 

Certificate chain 
0 s:/C=PH/ST=Metro Manila/L=Makati City/O=Metropolitan Bank and Trust Company/OU=CID-ITSAD/CN=IOSG-XRSWEB 
    i:/DC=local/DC=mgc/CN=MBTC-ENTCA1 
1 s:/DC=local/DC=mgc/CN=MBTC-ENTCA1 
    i:/DC=local/DC=mgc/CN=MGCROOTCA 
    ... 

我不能在網上找到它,所以你可能要聯繫銀行爲它。一旦你得到了它,確保它的PEM格式,然後:

$ openssl s_client -connect www.example.com:443 -tls1 \ 
    -servername www.example.com -CAfile MGCROOTCA.pem 
+0

了在/ usr/sfw/bin中/ OpenSSL的的s_client.First -connect主機名:443 -tls1 -servername主機名-CAfile MGCROOTCA.pem 未知選項-ServerName 用法的s_client.First ARGS –

+0

好改變它的OpenSSL的s_client.First -connect www.example後。 com:443 -tls1 -CAfile MGCROOTCA.pem工作,但現在我得到了: 驗證返回碼:7(證書籤名失敗) –

+0

*「...未知選項-servername用法:s_client args」* - 它聽起來像你使用真正的舊版本的OpenSSL。也許你應該在'/ usr/local/ssl'中安裝庫的更新版本,然後創建一個shell腳本,將調用轉發到'openssl'到'/ usr/local/ssl/bin/openssl'中。 。例如,請參見[mysql_ssl_rsa_setup獲取OpenSSL文件的位置?](http://stackoverflow.com/a/35834957/608639) – jww

相關問題