2016-07-25 26 views
2

Ich habe einen HTTPS-Server mit einem selbstsignierten Zertifikat mit dieser CN=localhost erstellt. Aber wenn ich den Client fange, sagt es mir einig Bind-Ausnahme:Ändern der Hostadresse in Java

socket::connect fails with error code = 10049 

ich mit CN=hostname etwas neues Zertifikat erstellt, die ich herausgefunden haben (und das ist der Computername) mit folgenden Zeile:

hostname = InetAddress.getLocalHost()); 

Aber dieser Weg ist nicht praktisch für mich. Ich möchte ein Zertifikat mit einer URL wie example.com erstellen und möchte dieses Zertifikat mehr als einmal verwenden. So hatte ich Idee folgende: Ich habe etwas url Hinzufügen/etc/hosts-Datei mit diesem:

127.0.0.1  example.com 

Und dann bin ich mit der URL example.com.

Gibt es eine Möglichkeit, InetAddress.getLocalhost zu ändern? Oder gibt es eine Möglichkeit, einen Kunden-IP-Adresse-Bestellhostnamen zu verwenden?

habe ich verwendet:

InetSocketAddress address = new InetSocketAddress("test.com",9999); 

eine Kundenadresse zu erstellen, aber das ist nicht die Bind-Exception aufgelöst.

Hat jemand Ideen?

+0

Auch die Verwendung finden Sie unter [Zuweisen eines Domain-Namen für Entwicklungsumgebung auf localhost] (https://stackoverflow.com/q/7576217/608639) und [Von Dritten signiertes SSL-Zertifikat für localhost oder 127.0.0.1?](https://Stackoverflow.com/q/6793174/608639) – jww

+0

*** 'CN = www.example.com "*** ist wahrscheinlich falsch. Hostnamen gehen immer in das * SAN *. Wenn es im * CN * vorhanden ist, muss es auch im * SAN * vorhanden sein (in diesem Fall müssen Sie es zweimal auflisten). Weitere Regeln und Gründe finden Sie unter [Wie unterschreiben Sie eine Zertifikatsignierungsanforderung mit Ihrer Zertifizierungsstelle] (http://stackoverflow.com/a/21340898/608639) und [So erstellen Sie ein selbstsigniertes Zertifikat mit openssl?] (http://stackoverflow.com/q/10175812/608639) Sie müssen das selbstsignierte Zertifikat auch im entsprechenden Trust Store speichern. – jww

Antwort

0

Wenn Hostname zu Hostname Zuordnung nicht möglich ist, erstellen wir ein Zertifikat mit IP-Adresse und später Karte n Anzahl der Hostnamen zu derselben IP-Adresse.

Erstellen Sie das Zertifikat mit CN=127.0.0.1 oder CN=<LOCAL_IP_ADDRESS> und dann lösen sie example.com durch hosts-Datei und dann versuchen, InetSocketAddress address = new InetSocketAddress("example.com",9999);

+0

Hallo! Danke für Ihre Antwort! Ich habe ein neues selbstsigniertes Zertifikat erstellt und es in meinen vorhandenen Keystore importiert. Jetzt habe ich diese Ausnahme: 'Ausnahme geworfen: javax.microedition.pki.CertificateException: Zertifikat enthält nicht den korrekten Aufstellungsort name localhost gegen test.com' Ich verstehe diese Ausnahme nicht. Weil ich beides importiert habe! Das Zertifikat für localhost und test.com. :-( –

+0

Wie viele Einträge haben Sie im Zertifikat? Könnten Sie versuchen mit einer neuen Zertifikatsdatei mit CN = 127.0.0.1? –

+0

Was meinst du mit "Wie viele Einträge hast du im Zertifikat?" Ich habe ein neues erstellt Zertifikat mit openssl und importierte dies in meinen Keystore, aber das löste mein Problem nicht: Mit meinem Browser als Client kann ich meinen Server erreichen, aber mit meinem Client, der eine Java-Anwendung ist, bekomme ich diesen Fehler: 'IOException aufgetreten socket :: connect scheitert mit dem Fehler code = 10051', wenn ich versuche, den Hostnamen zu erreichen, was ich oben beschrieben habe. Ich versuche 'https: // hostname: 443/'aufzulösen –