我正在編寫一個簡單的Java程序來調用RESTful Web服務,並且我已提供一個用於SSL身份驗證的.cer
文件。在Java中使用cert文件進行SSL身份驗證
我不確定如何在java中使用.cer
文件進行SSL握手,因爲我在嘗試調用Web服務時遇到SSL Handshake error
。
請您在這裏指導我。 在此先感謝。
我正在編寫一個簡單的Java程序來調用RESTful Web服務,並且我已提供一個用於SSL身份驗證的.cer
文件。在Java中使用cert文件進行SSL身份驗證
我不確定如何在java中使用.cer
文件進行SSL握手,因爲我在嘗試調用Web服務時遇到SSL Handshake error
。
請您在這裏指導我。 在此先感謝。
您可以禁用握手。下面是測試代碼:
private static void sslTest(String serviceUrl, String username, String password) throws Exception {
System.setProperty("jsse.enableSNIExtension", "false");
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
return true;
}
})
.useTLS()
.build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).setSSLSocketFactory(sslsf).build();
String content = "";
try {
HttpResponse response = client.execute(new HttpGet(serviceUrl));
if (Integer.toString(response.getStatusLine().getStatusCode()).equalsIgnoreCase("200")) {
HttpEntity entity = response.getEntity();
content = EntityUtils.toString(entity);
System.out.println(content);
}
} catch (Exception e) {
logger.error("Exception : {}", e.getMessage());
}
}
I have been provided with a .cer file for SSL authentication.
這是不夠的。
你應該有一個私鑰,你應該自己創建它,沒有給它,你應該已經從它生成一個自簽名證書或者證書籤名請求(CSR),並且已經產生了CSR由證書頒發機構(CA)簽署。
要使用這個在Java中驗證自己的身份,無論是私有密鑰和證書需要在相同的別名下一個密鑰,你需要提供通過系統屬性javax.net.ssl.keyStore
和javax.net.ssl.keyStorePassword
,或密鑰庫及其密碼否則通過更復雜的代碼方法,您將在JSSE參考指南中找到它們。
是的我使用下面的命令從.cer文件生成JKS:「keytool -importcert -file」exxon-devca-client.cer「-keystore exxon-devca-client.jks -alias」exxon-devca-client「」 我的jeresy rest客戶端代碼中還添加了以下行: File resourcesDirectory = new File(System.getProperty(「user.dir」)+「/resources/exxon-devca-client.jks」); \t \t System.setProperty(「javax.net.ssl.keyStore」,resourcesDirectory.getAbsolutePath()); \t \t System.setProperty(「javax.net.ssl.keyStorePassword」,「password」); 但現在我得到以下錯誤: javax.net.ssl.SSLHandshakeException:收到致命警報:bad_certificate –
我只能重複。你應該用私鑰啓動*,爲此你必須從JKS文件開始。從.cer文件生成新的JKS文件是沒有問題的。您必須使用相同的別名將其導入到您生成CSR的相同密鑰庫中。 NB請不要在評論中發佈計算機命令或輸出或代碼。你可以親眼看到它是完全難以辨認的。 – EJP
這個不安全的代碼不會禁用TLS握手。它禁用檢查握手期間收到的證書。不回答問題並且不安全使用。 – EJP
我是一個jeresy rest客戶端,上面的代碼不會工作。 –