Как обновить сертификат SSL - используя bouncycastle для TLS1.2 в java - PullRequest
1 голос
/ 13 февраля 2020

У меня есть приложение java, которое говорит TLS1.2 по SSL стороннему лицу. Недавно они обновили свой сертификат, который «сломал» приложение.

org.bouncycastle.tls.TlsFatalAlert: bad_certificate(42)
    at org.bouncycastle.jsse.provider.ProvTlsClient$1.notifyServerCertificate(Unknown Source)
    at org.bouncycastle.tls.TlsUtils.processServerCertificate(Unknown Source)
    at org.bouncycastle.tls.TlsClientProtocol.handleServerCertificate(Unknown Source)
    at org.bouncycastle.tls.TlsClientProtocol.handleHandshakeMessage(Unknown Source)
    at org.bouncycastle.tls.TlsProtocol.processHandshakeQueue(Unknown Source)
    at org.bouncycastle.tls.TlsProtocol.processRecord(Unknown Source)
    at org.bouncycastle.tls.RecordStream.readRecord(Unknown Source)
    at org.bouncycastle.tls.TlsProtocol.safeReadRecord(Unknown Source)
    at org.bouncycastle.tls.TlsProtocol.blockForHandshake(Unknown Source)
    at org.bouncycastle.tls.TlsClientProtocol.connect(Unknown Source)
    at org.bouncycastle.jsse.provider.ProvSSLSocketDirect.startHandshake(Unknown Source)
    at org.bouncycastle.jsse.provider.ProvSSLSocketDirect.handshakeIfNecessary(Unknown Source)
    at org.bouncycastle.jsse.provider.ProvSSLSocketDirect$AppDataOutput.write(Unknown Source)
    at java.io.DataOutputStream.writeBytes(DataOutputStream.java:259)

Не уверен, как установить новый сертификат, который у меня есть в формате * .cer. Я попытался добавить в jre, используя keytool, но это не помогло. Есть ли отдельный магазин, в который мне нужно добавить его? Если да, то как?

        Security.addProvider(new BouncyCastleProvider());
        Security.addProvider(new BouncyCastleJsseProvider());

        SSLContext context = SSLContext.getInstance("TLSv1.2", BouncyCastleJsseProvider.PROVIDER_NAME);
        context.init( null, null, new SecureRandom() );
        SSLSocketFactory ssf = context.getSocketFactory();
        SSLSocket s = (SSLSocket) ssf.createSocket( HOST, activePort );

        DataOutputStream dos = new DataOutputStream( s.getOutputStream() );

Спасибо за любую помощь!

...