Wie überprüft der MINA SSHD-Dienst das vom Client angebotene CA-Zertifikat?Java

Java-Forum
Guest
 Wie überprüft der MINA SSHD-Dienst das vom Client angebotene CA-Zertifikat?

Post by Guest »

Ich habe die Authentifizierungsmethode von PublickeyAuthenticator.java überschrieben und beim SSH-Server registriert.

Code: Select all

sshServer.setPublickeyAuthenticator(publicKeyAuth);
Aber wenn der Client den Schlüssel und das Zertifikat bereitstellt, zeigt MINA SSHD einen Fehler an:

Code: Select all

2024-12-25 17:29:30.882 sshd-SshServer[53600a30](port=2222)-nio2-thread-5 WARN  org.apache.sshd.server.session.ServerUserAuthService.warn - handleUserAuthRequestMessage(ServerSessionImpl[null@/127.0.0.1:56562]) Failed (InvalidKeyException) to authenticate using factory method=publickey: Supplied key (org.apache.sshd.common.config.keys.OpenSshCertificateImpl) is not a RSAPublicKey instance
Nach dem Debuggen habe ich festgestellt, dass das Problem darin besteht, dass, wenn MINA SSHD den Signaturprüfer des öffentlichen Schlüssels initialisiert, der übergebene öffentliche Schlüssel vom Typ OpenSshCertificateImpl ist, während Signature ein RSAPublicKey-Objekt erwartet.
Warum tritt dieses Problem auf? Wie kann ich es lösen?
==========update==========
I Ich habe die initVerifier-Funktion in SignatureRSA.java umgeschrieben und jetzt kann ich mich korrekt anmelden.
Alte initVerifier-Funktion:

Code: Select all

public void initVerifier(SessionContext session, PublicKey key) throws Exception {
super.initVerifier(session, key);
RSAKey rsaKey = ValidateUtils.checkInstanceOf(key, RSAKey.class, "Not an RSA key");
verifierSignatureSize = getVerifierSignatureSize(rsaKey);
}
Ich habe die initVerifier-Funktion überschrieben:

Code: Select all

public void initVerifier(SessionContext session, PublicKey key) throws Exception {
if (key instanceof OpenSshCertificate){
super.initVerifier(session, ((OpenSshCertificate) key).getCertPubKey());
RSAKey rsaKey = ValidateUtils.checkInstanceOf(((OpenSshCertificate) key).getCertPubKey(), RSAKey.class, "Not an RSA key");
verifierSignatureSize = getVerifierSignatureSize(rsaKey);
}else {
super.initVerifier(session, key);
RSAKey rsaKey = ValidateUtils.checkInstanceOf(key, RSAKey.class, "Not an RSA key");
verifierSignatureSize = getVerifierSignatureSize(rsaKey);
}
}
Ich bin immer noch neugierig, warum das passiert? Und ob meine Modifikation irgendwelche versteckten Gefahren birgt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post