2 votes

Comment faire pour que Jetty 9 ignore le keypass lors de l'accès au keystore ?

Comment faire pour que Jetty 9 ignore le keypass lors de l'accès au keystore ?

Voici ce que j'ai fait :

  • J'ai généré un certificat pour mon domaine à startssl.com.
  • J'ai généré un certificat chaîné (le mien + sub.class1.server.ca.pem + ca.pem) comme ceci openssl pkcs12 -export -inkey ssl.key -in /home/ubuntu/bundle.crt -out /home/ubuntu/bundle.pkcs12
  • Je les ai importés dans le nouveau keystore comme ceci : keytool -importkeystore -srckeystore /home/ubuntu/bundle.pkcs12 -srcstoretype PKCS12 -destkeystore /opt/jetty/etc/keystore
  • Pour une raison quelconque, l'alias était "1", je l'ai donc renommé en "jetty" comme ceci keytool -changealias -alias "1" -destalias "jetty" -keystore /opt/jetty/etc/keystore -storepass storepwd
  • Notez que j'utilise storepwd qui est le mot de passe par défaut de la distribution Jetty

Mon jetty-ssl.xml contient ceci

<Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
  <Set name="KeyStorePath"><Property name="jetty.home" default="." />/<Property name="jetty.keystore" default="etc/keystore"/></Set>
  <Set name="KeyStorePassword"><Property name="jetty.keystore.password" default="OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4"/></Set>
  <Set name="KeyManagerPassword"><Property name="jetty.keymanager.password" default="OBF:1u2u1wml1z7s1z7a1wnl1u2g"/></Set>
  <Set name="TrustStorePath"><Property name="jetty.home" default="." />/<Property name="jetty.truststore" default="etc/keystore"/></Set>
  <Set name="TrustStorePassword"><Property name="jetty.truststore.password" default="OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4"/></Set>
  <Set name="EndpointIdentificationAlgorithm"></Set>
  <Set name="ExcludeCipherSuites">
    <Array type="String">
      <Item>SSL_RSA_WITH_DES_CBC_SHA</Item>
      <Item>SSL_DHE_RSA_WITH_DES_CBC_SHA</Item>
      <Item>SSL_DHE_DSS_WITH_DES_CBC_SHA</Item>
      <Item>SSL_RSA_EXPORT_WITH_RC4_40_MD5</Item>
      <Item>SSL_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
      <Item>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
      <Item>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</Item>
    </Array>
  </Set>

  <New id="sslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
    <Arg><Ref refid="httpConfig"/></Arg>
    <Call name="addCustomizer">
      <Arg><New class="org.eclipse.jetty.server.SecureRequestCustomizer"/></Arg>
    </Call>
  </New>
</Configure>

Maintenant, quand je lance toute cette beauté, Jetty se bloque avec l'erreur suivante

2013-07-11 21:34:01.984:WARN:oejuc.AbstractLifeCycle:main: FAILED SslContextFactory@e45a028(/opt/jetty/etc/keystore,/opt/jetty/etc/keystore): java.security.UnrecoverableKeyException: Cannot recover key
java.security.UnrecoverableKeyException: Cannot recover key
    at sun.security.provider.KeyProtector.recover(KeyProtector.java:328)
    at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:138)
    at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55)
    at java.security.KeyStore.getKey(KeyStore.java:792)
    at sun.security.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:131)
    at sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:68)
    at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:259)

Ce qui est apparemment une erreur de mot de passe parce qu'il s'attend à ce que le keypass passe. keypwd à partir du keystore par défaut fourni avec Jetty.

Voici mes certicifats : http://pastebin.com/raw.php?i=p8LhT50P C'est la sortie de keytool -list -keystore /opt/jetty/etc/keystore -storepass storepwd -storetype JKS -v

Où cela se passe-t-il ? Comment puis-je corriger cette erreur ?

Gracias.

7voto

Bruno Points 47560

Il y a deux mots de passe impliqués : le mot de passe du keystore ( KeyStorePassword ) et le mot de passe de la clé ( KeyManagerPassword ). Pour le magasin PKCS#12, ils sont les mêmes.

Puisque vous avez importé la clé du magasin PKCS#12 dans le magasin JKS en utilisant le mot de passe du keystore, cela ne signifie pas que le mot de passe de la clé elle-même a été modifié, et ce n'est probablement pas le cas. "keypwd" (la valeur par défaut de Jetty). Essayez de remplacer la valeur de KeyManagerPassword avec le mot de passe de votre magasin PKCS#12.

(Notez qu'en général, vous n'avez pas besoin de convertir le keystore, vous auriez pu utiliser PKCS12 comme le KeyStoreType).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X