Wie behebt man den Fehler "java.security.cert.CertificateException: No subject alternative names present"?

Ich habe einen Java-web service-client einen web service nutzt, via HTTPS.

import javax.xml.ws.Service;

@WebServiceClient(name = "ISomeService", targetNamespace = "http://tempuri.org/", wsdlLocation = "...")
public class ISomeService
    extends Service
{

    public ISomeService() {
        super(__getWsdlLocation(), ISOMESERVICE_QNAME);
    }

Wenn ich eine Verbindung an die Dienst-URL (https://AAA.BBB.CCC.DDD:9443/ISomeService ), bekomme ich die exception java.security.cert.CertificateException: No subject alternative names present.

Um es zu beheben, ich lief zuerst openssl s_client -showcerts -connect AAA.BBB.CCC.DDD:9443 > certs.txt und habe folgenden Inhalt in der Datei certs.txt:

CONNECTED(00000003)
---
Certificate chain
 0 s:/CN=someSubdomain.someorganisation.com
   i:/CN=someSubdomain.someorganisation.com
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=someSubdomain.someorganisation.com
issuer=/CN=someSubdomain.someorganisation.com
---
No client certificate CA names sent
---
SSL handshake has read 489 bytes and written 236 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 512 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-MD5            
    Session-ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Session-ID-ctx:                 
    Master-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Key-Arg   : None
    Start Time: 1382521838
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---

AFAIK, jetzt muss ich

  1. extrahieren Sie die Teil certs.txt zwischen -----BEGIN CERTIFICATE----- und -----END CERTIFICATE-----,
  2. ändern Sie es so, dass der name des Zertifikats entspricht AAA.BBB.CCC.DDD und
  3. importieren Sie dann das Ergebnis mit keytool -importcert -file fileWithModifiedCertificate (wo fileWithModifiedCertificate ist das Ergebnis der Operationen 1 und 2).

Ist das richtig?

Wenn ja, wie genau kann ich das Zertifikat aus Schritt 1 arbeiten mit IP-Basis-Adresse (AAA.BBB.CCC.DDD) ?

Update 1 (23.10.2013 15:37 MSK): In einer Antwort auf eine ähnliche Fragelese ich Folgendes:

Wenn du nicht in der Steuerung, server, verwenden Sie dessen host-Namen (sofern
dass es mindestens eine CN-passende, die host-Namen in das bestehende
cert).

Was genau bedeutet "benutzen"?

InformationsquelleAutor der Frage DP_ | 2013-10-23

Schreibe einen Kommentar