2016-01-21 167 views
1

貝寶已更新其沙盒API端點和證書,以使用sha256而不是sha1。 要遷移我的應用程序(它連接到貝寶快速結賬)使用SHA256,貝寶證書升級到sha256

一)刪除,並從我的PayPal帳戶下載新的證書,並轉換 它的.p12格式 使用OpenSSL證實,該證書是使用sha256withRsa

b)中確認了/etc/ssl/certs/ca-certs.crt由具有威瑞G5 CA證書作爲從我的Java代碼中的鏈接 https://gist.github.com/robglas/3ef9582c6292470a1743

仍然無法連接到貝寶沙箱給定它使用HttpClient。握手

期間未能在Java代碼中 - 使用SSLContext.getInstance( 「SSL」)

使用自定義信任庫

Class CustomTrustManager implements X509TrustManager { 

public boolean checkClientTrusted(java.security.cert.X509Certificate[] chain) { 
    return true; 
} 

public boolean isServerTrusted(java.security.cert.X509Certificate[] chain) { 
    return true; 
} 

public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
    return null; 
} 

public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { 
} 

public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { 
} 

}

我使用實例SunX509的的KeyManagerFactory和將其初始化爲pkcs12密鑰庫。

我錯過了什麼。請幫忙!

+0

你不需要一個自定義的TrustManager,而且這個並不是什麼好事,但是你經常會看到它發佈爲'解決方案'。不要使用此代碼。 'getAcceptedIssuers()'不能返回null,並且整個事情都是100%不安全的。你也可以使用明文。 – EJP

回答

0

問題是與開放jdk 7版本。默認情況下,打開的jdk具有JCE無限強度策略文件(需要支持256位密碼)。但是有些版本的密碼被禁用(可能是一個bug)。將open jdk升級到版本1.7.0_91解決了問題。

1

這更適合評論,但我沒有足夠的聲望。 我在過去有類似的問題與其他服務的問題是,Java 7默認使用舊的SSL算法,如果可以的話,嘗試使用Java 8。如果您必須堅持使用當前的Java版本,請嘗試使用不同的算法,或者查看是否可以從paypal獲取有關ssl配置的一些信息。這link可能會幫助

+0

非常感謝鏈接。 Paypal下載的API證書的簽名算法爲「sha256WithRsa」。 sha256WithRsa由「提供者」SunRsaSign支持,而不受SunJSSE支持。現在pkcs12似乎不受SunRSASign的支持。 KeyStore.getInstance(「PKCS12」,「SunRsaSign」);拋出錯誤。 SunRsaSign提供簽名類,不提供jks/pkcs12的實現。如何使用簽名類來進行ssl ssl連接? – girish

+0

請參閱鏈接http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html#SunRsaSignProvider – girish

+0

我認爲[this](http://www.oracle.com/technetwork/articles /javase/security-137537.html),應該有所幫助。在頁面底部(我不能鏈接它由於某種原因滾動),有「導入和導出PKCS#12密鑰庫」。希望能幫助到你。 –