2010-03-30 10 views
1

J'ai une application Java qui s'exécute sur des périphériques Windows Mobile à l'aide d'une JVM tierce. L'application communique avec un serveur Apache Tomcat via HTTP. Nous avons également utilisé HTTPS pour certaines connexions et les certificats ont été créés à l'aide de l'utilitaire Sun keytool. Un keystore a d'abord été créé en utilisant genkey, puis le certificat exporté en utilisant export et finalement importé dans un autre keystore en utilisant import. Le fichier créé par genkey a été chargé dans le serveur Apache et le fichier de clés créé à l'aide de l'importation a été chargé dans la JVM sur le PDA. Tout fonctionne comme prévu.Comment créer un certificat auto-signé X509 à utiliser dans Apache Tomcat

Je travaille maintenant avec une nouvelle machine virtuelle Java sur le PDA et (pour une raison quelconque) j'ai établi que cette machine virtuelle nécessite que le fichier de clés soit au format X509 (DER). J'ai commencé à travailler dessus il y a environ un mois et je l'ai fait fonctionner, mais stupidement, je n'ai jamais noté les étapes que j'ai suivies, et maintenant je ne peux pas me souvenir de ce que j'ai fait. Je me souviens d'utiliser openssl mais à part ça, je suis totalement perdu. Tout ce que je crée maintenant en utilisant openssl et essaye de charger dans Apache provoque une erreur au démarrage (Invalid Keystore Format) donc je suis probablement en train de rater complètement quelque chose.

Est-ce que quelqu'un a des idées sur la façon dont je devrais créer ce certificat X509 autosigné qui peut être chargé sur un serveur Apache et sur une machine virtuelle exécutée sur un PDA?

MISE À JOUR

J'ai suivi les instructions d'Apache sur la création du certificat auto-signé:

openssl req -new -x509 -nodes -out server.crt -keyout server.key 

Mais quand je copie la clé du répertoire conf Apache et le démarrage je reçois une exception:

java.io.IOException: invalid keystore format 
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633) 
... 

le fichier server.xml contient l'entrée suivante pour HTTPS:

<Connector port="6969" 
     protocol="HTTP/1.1" 
      SSLEnabled="true" 
       maxThreads="150" 

       scheme="https" 
       sslProtocol="TLS" 
       secure="true" 

       clientAuth="false" 

       keystoreFile="./conf/server.key" 
       keystorePass="password" 

     ciphers="SSL_RSA_WITH_RC4_128_MD5" 
    /> 

Je suppose que le keystore doit être un format de keystore Java? Mais j'ai besoin que le certificat soit au format x509 pour l'appareil, donc je ne suis pas sûr de savoir comment faire cela?

Répondre

1

L'utilitaire KeyStoreBuilder dans non encore commons-ssl-0.3.11.jar peut convertir entre les certificats PEM de type Apache/OpenSSL et les fichiers Java keystore:

http://juliusdavies.ca/commons-ssl/utilities.html#ksb

Essayez de lancer pour voir le l'option de ligne de commande:

java -cp non encore commons-ssl-0.3.11.jar org.apache.commons.ssl.KeyStoreBuilder

1

Vous écrivez que la nouvelle machine virtuelle java sur le PDA nécessite la DER format. La ligne de commande openssl que vous utilisez créera des fichiers PEM par défaut. Vous pouvez convertir ces fichiers server.crt et server.key PEM au format DER en utilisant ces commandes OpenSSL:

$ openssl x509 -in server.crt -outform DER -out server.crt2 
$ openssl rsa -in server.key -outform DER -out server.key2 

fichiers PEM seront lisibles sous forme de fichiers texte et les fichiers DER serez binaire. Si c'est vraiment juste une différence entre le format PEM et le format DER, cela devrait faire l'affaire.