Запрос Curl с сертификатами на Java

#java #ssl #curl

Вопрос:

Я сделал запрос с керлом:

 curl -vvv -H "Accept application/vnd.kafka.json.v2 json"  https://myurl.org:443/topics  --cacert ./server.pem  --cert-type PEM  --cert ./client.pem  --key client.key  

Запрос в порядке. У меня есть информация

Но мне нужно использовать Java. Я попытался преобразовать curl в java.

Во-первых, я создал хранилище ключей:

 openssl pkcs12 -export -inkey client.key -in client.pem -out client.p12  keytool -importkeystore -srckeystore client.p12  -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKS  

После этого я создал магазин доверия:

 keytool -import -trustcacerts -file server.pem -alias ServerCA -keystore truststore.jks -storetype JKS  

Исходный код Java является:

 import java.io.*; import java.net.*; import javax.net.ssl.*;   public class jcs {  public static void main(String[] args) throws Throwable{   System.setProperty("javax.net.debug", "all");   URL url=new URL("https://myurl.org:443/topics");   HttpsURLConnection huc=(HttpsURLConnection)url.openConnection();   for(int i=1;ilt;=8;i  ){  System.out.println(huc.getHeaderFieldKey(i) " = " huc.getHeaderField(i));  }  huc.disconnect();    }  }  

Параметры запуска являются:

 java  -Djavax.net.ssl.keyStore=./keystore.jks  -Djavax.net.ssl.keyStorePassword=XXXXX  -Djavax.net.ssl.trustStore=./truststore.jks  -Djavax.net.ssl.trustStorePassword=YYYYY  jcs  

Но запрос java отправил мне сообщение об ошибке:

 javax.net.ssl|ERROR|01|main|2021-12-03 10:55:16.685 CET|TransportContext.java:341|Fatal (BAD_CERTIFICATE): Received fatal alert: bad_certificate ( "throwable" : {  javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate  at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)  at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)  at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:336)  at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293)  at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:185)  at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:171)  at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1418)  at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1324)  at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:440)  at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:411)  at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)  at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:197)  at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1592)  at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)  at java.base/sun.net.www.protocol.http.HttpURLConnection.getHeaderFieldKey(HttpURLConnection.java:3152)  at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getHeaderFieldKey(HttpsURLConnectionImpl.java:303)  at jcs.main(jcs.java:24)}  )  

I tried in java11 and java1.8, the same error.

Any idea about this problem?

Thanks all

Kr, Toletum