PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ziemlich spezifisches Proble: Openssl-Server und JSSE-Client


mithrandir
2004-04-01, 12:12:21
Hallo Leute,

Ich habe ein Problem beim Implementieren einer Client-Server-Anwendung, die über eine SSL-Verbindung über Sockets Daten austauschen soll.

Auf der Server-Seite bin ich gezwungen, auf C/C++ zu bleiben und als freies Tool soll (muss?) ich da Openssl verwenden.

Auf der Client-Seite bietet sich mir mit Java (ebenfalls Vorgabe) die Möglichkeit, einfach über JSSE zu arbeiten.

Leider bekomme ich den Handshake aber nicht hin, da laut Server der Client kein Zertifikat schickt:

7371:error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate:s3_srvr.c:1982

Auf der Client-Seite habe ich dazu folgenden Code, der eigentlich (für keyStore und trustStore wird der gleiche keyStore verwendet, in dem sowohl signiertes Client-Zertifikat mit private key, als auch das selbstsignierte Root-CA-Zertifikat enthalten sind) laut Beispielen zu einer Client-Authentication führen sollte:

if ( doClientAuth )
{
SSLContext ctx = SSLContext.getInstance( "SSL" );

ctx.init( kms, // erhalten aus KeyManagerFactory#getKeyManagers()
tms, // erhalten aus TrustManagerFactory#getTrustManagers()
new java.security.SecureRandom() );

factory = (SSLSocketFactory) ctx.getSocketFactory();
}
else
{
SSLContext sslcontext = SSLContext.getInstance( "SSL" );

sslcontext.init( null,
tms, // erhalten aus TrustManagerFactory#getTrustManagers()
new java.security.SecureRandom() );

factory = (SSLSocketFactory) sslcontext.getSocketFactory();
}

Auf der Serverseite setze ich mit SSL_CTX_set_client_CA_list lediglich das Root-CA-Zertifikat und habe über SSL_CTX_set_verify eine Callback-Funktion definiert, die das Client-Zertifikat prüfen soll, was aber gar nicht erst passiert, weil eben keines mitgeschickt wird.

Im Netz habe ich bisher viele Leute mit sehr ähnlichen Problemen gefunden, aber noch keine annehmbare Lösung. Auf der Openssl-Schiene funktioniert alles problemlos für Client und Server und auch bei JSSE funktionieren Client und Server einwandfrei. Nur die Mischung Server: Openssl, Client: JSSE schein Probleme zu machen.

Kann mir jemand weiterhelfen oder hat evtl. sogar ein arbeitendes Beispielprogramm (Echo-Server)?

bye, mith

mithrandir
2004-04-02, 11:18:10
Hallo nochmal,

Ich bin ja eher skeptisch, ob ihr so etwas jemals brauchen werdet, auf jeden Fall funktioniert das ganze auf der Client-Seite nicht mit der Standard-Implementierung des X509KeyManagers (über KeyManagerFactory usw.), sondern man muss das Interface (X509KeyManagers) selbst implementieren - dann klappt's auch mit dem Nachbarn.

Danke trotzdem an alle, die hereingeschaut haben ; - )

bye, mith