私は、クエリカールを使用して要求を取得することができます:RESTを作成するには証明書を使用してリクエストを取得しますか?
curl -k --key some.key --cert some.crt --url "https://app.com:7078/subscribers/checkExists/1"
そのクエリの後、私は200 OK
レスポンスを得ます。私はどのようにJavaで同じことを達成できますか? Spring RestTemplate
を使用していますか?
私はインターネットでマニュアルによる認証チェックを無効にしてみました:
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
ResponseEntity<String> response = null;
String urlOverHttps = "https://app.com:7078/subscribers/checkExists/1";
response = new RestTemplate(requestFactory).exchange(urlOverHttps, HttpMethod.GET, null, String.class);
はまた、私は@Configuration
を経由して、それを試してみました:
@Bean
public boolean disableSSLValidation() throws Exception {
final SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}}, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
return true;
}
そして、そのコード応答くれ400 Bad Request
エラー。私も%JAVA_HOME%\lib\security
に私のsome.crt
ファイルを追加し、コマンドでそれをインポート
UPD
- だから、keytool -import -alias ca -file some.crt -keystore cacerts -storepass changeit
、どのように私はSpring RestTemplate
を使用してGET
リクエストで私のsome.crt
ファイルを提供することができますか?