SSL-Zertifikat-Verifizierung : javax.net.ssl.SSLHandshakeException
Bin ich versucht, rufen Sie eine HTTPS-REST-API durch Jersey Client
. Und auf den Verlauf der Entwicklung stolpere ich über folgenden Fehler :
Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching mvn.signify.abc.com found
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149)
at com.sun.jersey.api.client.Client.handle(Client.java:648)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
at com.lftechnology.sbworkbench.utility.utils.PingFederateUtility.main(PingFederateUtility.java:32)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching mvn.signify.abc.com found
Also googelte ich es für ein bisschen und fand Tonnen Lösung , die tatsächlich funktioniert.
- HTTPS mit Client-Jersey
- https://gist.github.com/outbounder/1069465
- Wie kann man das "java.Sicherheit.cert.CertificateException: Kein Betreff alternative Namen vorhanden" - Fehler?
- http://www.mkyong.com/webservices/jax-ws/java-security-cert-certificateexception-no-name-matching-localhost-found/
- http://java.globinch.com/enterprise-java/security/fix-java-security-certificate-exception-no-matching-localhost-found/
Sind Sie in anderen Domäne, aber Sie haben eine gemeinsame Lösung zu arbeiten.
Szenario
Ich bin derzeit mit einem selbst erstellten self-signed certificate in development environment. Und damit ist es gebunden ist, zu zeigen, bis Sie das Problem.
Frage
Der oben genannten Lösung den Fokus auf das überspringen /erlaubt alle Zertifikate zu verifizieren.
Aber wenn ich mich bewege es an die Produktionsumgebung , dann habe ich Zugriff auf Gültiges Signiertes Zertifikat aus vertrauenswürdiger Quelle.
- Also diese Lösung helfen, wenn ich zu bewegen, um die Produktion?
- Ist es OK überspringen der SSL-überprüfung ?
- Was sind die anderen alternativen Weg zum erreichen einer gemeinsamen Lösung für
sowohl die Entwicklung und Produktion Umwelt?
P. S
Die Lösung, die ich verwendet wurde ,
try
{
//Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
//Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
//Create all-trusting host name verifier
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
//Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
die ich dann in Zusammenarbeit mit Jersey
machen, damit es funktioniert. Und es funktioniert Super.
So , die Question
wieder. Ist diese Lösung sinnvoll eingesetzt werden, in der Produktion Umwelt?
Allerdings müssen Sie nicht möchten, ändern Sie die Rückkehr Einheiten, es ist viel besser, Holen die Personen in nur-lese-Modus. Dies wird ermöglicht Hibernate zu verwerfen, die damit verbundenen abgenommenen Zustand, die verwendet wird, durch die dirty-checking-Mechanismus zum erkennen von entity-state-Modifikationen. Mehr, nur-lese-Einheiten übersprungen werden während der Spülung.
- "Ist es OK, überspringen SSL-überprüfung ?" - eher nicht.. oder hast du nicht hier über Apples GOTO-FAIL?!
- "Also , nochmal die Frage. Ist diese Lösung sinnvoll eingesetzt werden, in der Produktion Umwelt?" - nicht, nicht seiner. Seine unverantwortlich und grob fahrlässig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es erscheint das selbst signierte Zertifikat ist falsch.
Unten ist die OpenSSL -
CONF
Datei benutze ich zum erstellen von selbst signierten Zertifikaten und Zertifikatsanforderungen verwenden Sie während der Prüfung. Speichern Sie es alsexample-com.conf
. Ändern Sie den DNS-Namen unter[ alternate_names ]
nach Ihrem Geschmack. Sie können sogarlocalhost
,localhost.localdomain
und127.0.0.1
dort zum testen.Wenn Sie möchten, erstellen Sie ein selbst signiertes Zertifikat, dann verwenden:
Wenn Sie möchten, erstellen Sie eine signing request (CSR) wird unterzeichnet von einer vertrauenswürdigen Stelle, dann verwenden Sie:
Den Unterschied zwischen einem selbst signierten Zertifikat und ein signing request ist die
-x509
option. Mit-x509
vorhanden, ein selbst signiertes Zertifikat erstellt. Die Abwesenheit von-x509
bedeutet eine Anforderung erstellt wird.Wenn Sie möchten, drucken Sie Ihre selbst signiertes Zertifikat anzufordern oder um zu sehen, was eigentlich in ihm, dann verwenden:
Wenn Sie möchten, den server zu testen, verwenden Sie dann
s_client
:Den oben genannten Befehl beenden sollte eine Meldung ähnlich
Verify OK (0)
. Wenn Sie nicht erhaltenVerify OK (0)
, dann fixieren Sie Ihren Prüfstand. Sobald OpenSSL erfolgreich abgeschlossen wurde, dann wird der Basislinie.Nicht. Das ist sehr unverantwortlich. Wenn Sie nicht verwenden PKIX richtig, warum Sie überhaupt nutzen?
Dies kommt in den Sinn: Die Meisten Gefährlichen Code in the World: Validating SSL Certificates in Non-Browser Software.
Es ist besser, Sie laden Ihre selbst signiertes Zertifikat in einen Keystore (oder laden Sie Ihr eigenes, CA), und dann geben Sie auf
SSLContext.init
. Dann funktioniert alles wie vorgesehen, und es gibt keine Notwendigkeit zu Vertrauen, alles oder zurücktrue
ausverify
.Bruno und EJP haben reichlich Antworten abdecken, das Thema.
Verwenden Sie eine gut gebildete Zertifikat, dass die Zertifikatkette zu einer vertrauenswürdigen Stammzertifizierungsstelle.
Für die Prüfung, können Sie erstellen ein selbst signiertes Zertifikat. Oder, erstellen Sie ein Zertifikat anfordern, und haben es unterzeichnet, die von Ihrer internen ZERTIFIZIERUNGSSTELLE in einem eigenen PKI. In diesem Fall müssen Sie das Vertrauen Ihrer selbst signiertes Zertifikat oder Vertrauen Ihrer internen ZERTIFIZIERUNGSSTELLE.
Für die Produktion verwenden, können Sie ein Zertifikat unterschrieben von einem Mitglied der CA-Zoo, so dass andere außerhalb der Organisation vertraut ihm auch. StartCom und CACert bieten Kostenlose Class-1-Zertifikate.
Class-1-Zertifikate sind in der Regel Domänen validiert und erlauben nicht, dass wild cards. Während die Klasse 1 wird kostenlos ausgestellt, die Sie kostenlos für einen Widerruf, weil das ist, wo der Preis liegt.
Wenn Sie eine wild card, dann wird in der Regel zum Kauf einer Class 2 oder höher.
solution
ich erwähnt.DNS.5 = 192.168.1.56
. Wenn seine immer noch nicht funktioniert, dann seine im Zusammenhang mit Browsern. Aber ich habe nicht in der Lage, auf die Spur, was genau Browser beleidigend über IP-Adressen (und DNS-Namen). Ryan Sleevi von Google erklärt es auf Kommentare zu draft-ietf-websec-key-pinning, aber ich habe ihn nicht verdaut noch.@jww zu Recht Antworten auf die Frage
Jedoch in einigen Fällen können Sie nicht den server Steuern in Frage stellen zu können, installieren Sie ein gültiges Zertifikat. Wenn den server jemand anderem gehört, und Vertrauen Sie darauf, dass server, eine bessere Lösung ist die Verwendung einer "weißen Liste" zur Validierung von Zertifikaten nur für Vertrauenswürdige Server zu verwenden, ansonsten normale Prüfung.
Und installieren Sie es einmal:
Wenn du gehst zu deaktivieren, einen Sicherheits-check, tun Sie es nicht, weltweit...
Es ist ein label, software-Fehler mit dem Java-Keytool für die Java-version 1.7.0_60-b19, beim erstellen eines selbst signierten Zertifikat. Sehen Sie diese Anweisungen für eine Referenz.
https://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-using-java-keytool.html
Wenn es fordert Sie auf: "Was ist dein vor-und Nachname?", anstatt Ihren Namen, geben Sie den gemeinsamen Namen, oder (fully qualified domain name des Servers ist).
Können Sie überprüfen, ob die "CN" (common name) - Attribut festgelegt wird korrekt durch den Aufruf dieser:
Finden Java-version: