RESTfulなWebサービスを呼び出すための簡単なJavaプログラムを作成しています。SSL認証用に.cer
ファイルが提供されています。JavaでSSL認証にcertファイルを使用する
.cer
ファイルをjavaのSSLハンドシェイクで使用する方法がわかりません。そのため、Webサービスを呼び出すときにSSL Handshake error
が返されます。
ここで私を案内してください。 ありがとうございます。
RESTfulなWebサービスを呼び出すための簡単なJavaプログラムを作成しています。SSL認証用に.cer
ファイルが提供されています。JavaでSSL認証にcertファイルを使用する
.cer
ファイルをjavaの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)を発行し、認証局(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クライアントコードに以下の行を追加しました。 ファイル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 –
私は繰り返すことができます。あなたは秘密鍵で* started *を持っていなければなりません。そのためにはJKSファイルで始める必要があります。 .cerファイルから新しいJKSファイルを生成することは問題ありません。同じエイリアスを使用して、CSRを生成したキーストアにインポートする必要があります。注意事項コメントにコンピュータコマンドや出力、コードを投稿しないでください。あなたはそれが完全に判読不能であることが分かります。 – EJP
この安全でないコードは、TLSハンドシェイクを無効にしません。ハンドシェイク中に受信した証明書のチェックが無効になります。質問に答えず、安全に使用することはできません。 – EJP
私はjeresy rest clientですが、上記のコードは動作しません。 –