#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