Heim >Java >javaLernprogramm >Warum erhalte ich die Fehlermeldungen „Nicht verfügbare Cipher Suite ignorieren' und „Keine gemeinsamen Cipher Suites', wenn ich „SSLContext.init' mit einem Null-KeyManager-Array verwende?
Sie initialisieren Ihren SSLContext mit einem Null-KeyManager-Array.
Der Schlüsselmanager verwaltet das Serverzertifikat (auf der Serverseite), und das ist es Sie möchten wahrscheinlich festlegen, dass Sie javax.net.ssl.keyStore verwenden.
Wie jedoch im JSSE-Referenzhandbuch beschrieben, bewirkt die Verwendung von null für den ersten Parameter nicht das, was Sie zu glauben scheinen :
Wenn der Parameter KeyManager[] null ist, wird ein leerer KeyManager
für diesen Kontext definiert. Wenn der TrustManager[]-Parameter null ist,
werden die installierten Sicherheitsanbieter nach der
Implementierung der TrustManagerFactory mit der höchsten Priorität durchsucht, von der
ein geeigneter TrustManager abgerufen wird. Ebenso kann der
SecureRandom-Parameter null sein. In diesem Fall wird eine Standardimplementierung
verwendet.
Ein leerer KeyManager enthält keine RSA- oder DSA-Zertifikate. Daher sind alle Standard-Cipher-Suites, die auf einem solchen Zertifikat basieren würden, deaktiviert. Aus diesem Grund erhalten Sie alle diese Meldungen „Nicht verfügbare Cipher-Suite wird ignoriert“, die letztendlich zu der Meldung „Keine gemeinsame Cipher-Suite“ führen.
Wenn Sie möchten, dass Ihr Keystore als Keystore verwendet wird, tun Sie dies muss es laden und eine KeyManagerFactory damit initialisieren:
KeyStore ks = KeyStore.getInstance("JKS");
InputStream ksIs = new FileInputStream("...");
try {
ks.load(ksIs, "password".toCharArray());
} endlich {
if (ksIs != null) { ksIs.close(); }
}
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory
.getDefaultAlgorithm());
kmf.init(ks , "keypassword".toCharArray());
Verwenden Sie kmf.getKeyManagers() als ersten Parameter für SSLContext.init().
Für die anderen beiden Parameter, da Sie sichtbar sind Wenn Sie keine Client-Zertifikatauthentifizierung anfordern, sollten Sie den Trust-Manager auf seinem Standardwert (null) belassen, anstatt einen Trust-Manager zu kopieren/einzufügen, der eine potenzielle Ursache für Schwachstellen darstellt. Sie können auch den Standardwert null SecureRandom verwenden.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldungen „Nicht verfügbare Cipher Suite ignorieren' und „Keine gemeinsamen Cipher Suites', wenn ich „SSLContext.init' mit einem Null-KeyManager-Array verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!