Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SSL sur Mac OS X

1 réponse
Avatar
JScoobyCed
Bonjour,

J'ai une application 3-tiers ecrite en Java completement. C'est un
serveur de fichier particulier (il y a un traitement qui est fait sur
les fichiers du serveur)

Les echanges sont simple:

client --> server --> backup
et
server --> client

La "-->" signifie: "envoie un fichier a"

Chaque connection utilise un Socket --> ServerSocket utilisant un layer
SSL. Le Socket est cree ainsi:

<code>
SocketFactory ssf = sslcontext.getSocketFactory();
SSLSocket socket = (SSLSocket)ssf.createSocket(server, port);
</code>

Le ServerSocket est cree ainsi:

<code>
ServerSocketFactory ssf = sslcontext.getServerSocketFactory();
SSLServerSocket serversocket =
(SSLServerSocket)ssf.createServerSocket(port);
</code>

Avant d'utiliser ces fonctions, il y a une partie d'initialisation SSL:

<code>
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(getClass().getResourceAsStream(keystore),
keystorepass.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, keypassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(ks);
sslcontext = SSLContext.getInstance("SSLv3");
sslcontext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
</code>

Quand je demarre le client, server et backup sur ma machine (WinXP), ca
marche nickel.
Maintenant, je mets le serveur et le backup sur un site distant (les
deux sur la meme machine), et il y a un soucis entre server --> backup.
Le site distant est un Mac OS X. Entre mon client et le serveur, ca se
passe bien. C'est des que le serveur envoie sur le backup
(localhost:port) qu'il y a une Exception:

Sur le server:
<Exception>
javax.net.ssl.SSLException
Connection has been shutdown: javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: No trusted certificate found
com.sun.net.ssl.internal.ssl.SSLSocketImpl.d(DashoA6275)
com.sun.net.ssl.internal.ssl.AppInputStream.read(DashoA6275)
net.rochefolle.cedcore.net.InputStreamUtility._readBytes(InputStreamUtility.java:39)
</Exception>

Sur le backup:
<Exception>
javax.net.ssl.SSLHandshakeException
Received fatal alert: certificate_unknown
com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.a(DashoA6275)
com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.b(DashoA6275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.b(DashoA6275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.j(DashoA6275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
com.sun.net.ssl.internal.ssl.AppInputStream.read(DashoA6275)
net.rochefolle.cedcore.net.InputStreamUtility._readBytes(InputStreamUtility.java:39)
</Exception>

Sur le server, j'utilise le meme fichier cree par l'outil "keytool" pour
communiquer entre le client et le backup. Sur Mac OS X, est-ce que ce
fichier serait bloque en lecture?
Le fichier certificat est dans mon fichier .jar.

Une idee pour me depanner? Merci.

--
JSC

1 réponse

Avatar
JScoobyCed
Apres des recherches et essais, j'ai vu qu'en fait MAC OS X est bien
plus regardant au certificat SSL que Windows. Il faut que l' alias, le
keystore et les passwords (keystorepassword et keypassword) soient
different, sinon le "-Djavax.net.debug=ssl" n'indiquera pas que le
certificat est "trusted"
Si j'utilise des valeurs differentes pour les passwords, le debugger SSL
indique que le certificat est "trusted".

--
JSC