Czy magazyn kluczy Java może importować parę kluczy wygenerowaną przez OpenSSL?

Generuję klucz certyfikacji za pomocą openssl. Oto mój rozkaz:

OpenSSL genrsa-des3-out enc_key.pem 1024

Eksportuję do pliku cer, następnie za pomocą java keytool importuję do java keystore (jks).

Klucz brzmi dobrze. Mogę załadować keystore z mojej aplikacji java.

Problem polega na tym, że gdy klient połączy się z serwerem (w tym przypadku jest to serwer FTP, a nie serwer WWW, a ja używam Apache mina), wystąpił wyjątek:

Javax. net. ssl. SSLHandshakeException: SSL handshake failed. w org.Apacz.mina.filtr.ssl.SslFilter.messagerec (SslFilter.Java:433) w org.Apacz.mina.rdzeń.filterchain.DefaultIoFilterChain.callNextMessageReceived (DefaultIoFilterChain.Java:434) w org.Apacz.mina.rdzeń.filterchain.DefaultIoFilterChain.dostęp$5 (DefaultIoFilterChain.java:429)

...

Wywołane przez: javax. net. ssl. SSLHandshakeException: no cipher suites in common na com. sun. net. ssl.internal.ssl.Handshaker. check(Nieznane źródło) at com. sun. net. ssl. internal.ssl.SSLEngineImpl. checkktask(Nieznane źródło) at com. sun. net. ssl. internal. ssl. SSLEngineImpl. writeAppRecord(Nieznane źródło) at com. sun. net. ssl. internal.ssl.SSLEngineImpl. wrap(Nieznane źródło) at javax.net.ssl.SSLEngine. wrap(Unknown Source)

...

Wywołane przez: javax. net. ssl. SSLHandshakeException: no cipher suites in common na com. sun. net. ssl.internal.ssl.Alerts. getSSLException(Nieznane źródło) at com. sun.net.ssl.internal.ssl.SSLEngineImpl. fatal(Nieznane źródło)

Jest kilka rzeczy, o które chcę zapytać:

  1. jaki jest szyfr certyfikacji, który generuję za pomocą openssl? Skąd możemy wiedzieć? może przez linię komend openssl xxx?
  2. idę do http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA . i dodałem SSL_RSA_xxx do enabled cipher suity, ale nadal nie może działać (wstawiłem SSL_RSA, ponieważ SSL używa ssl implisit, a genrsa, tylko moim zdaniem genrsa generuje RSA). Czy to prawda?
  3. Ktoś zna rozwiązanie?
  4. lub, ktoś wie jak wygenerować standardowy keystore z linii poleceń openssl, dopóki nie będzie można go użyć w aplikacji java (oczywiście z szyfrem). Ponieważ w tej chwili mogę wygenerować certyfikat z openssl i wyeksportować keystore java, ale nie wiem, co to jest szyfr, którego użyłem i jak używać w aplikacji java. Uwaga: mogę uruchomić, jeśli keystore jest generowany bezpośrednio z Javy. W tej chwili problem polega na tym, że keystore wygenerowany przez java keytool z certyfikatów takich jak openssl (i innych być może).

Każda pomoc będzie mile widziana! Dzięki

Author: erickson, 2010-04-21

1 answers

Dlaczego używasz OpenSSL do generowania klawiszy? Dlaczego po prostu nie użyć keytool?

Narzędzie genrsa generuje klucz prywatny. Jak utworzyć odpowiedni certyfikat? Jak zaimportować klucz prywatny do magazynu kluczy Java? (Pytam, ponieważ keytool może importować tylko klucz prywatny z istniejącego magazynu kluczy i tylko z Java 6.)

Podejrzewam, że twój problem polega na tym, że Twój magazyn kluczy nie zawiera wpisu klucza (klucz prywatny i odpowiadającego certyfikat). Kiedy podajesz zawartość keystore za pomocą keytool, Ile jest wpisów? Czy są to wpisy kluczowe czy zaufane?


Serwer potrzebuje dostępu do klucza prywatnego w celu uwierzytelnienia się. Aby zaimportować klucz prywatny, użyj Java 6 ' s enhanced keytool.

Po utworzeniu klucza i certyfikatu za pomocą OpenSSL, użyj OpenSSL, aby utworzyć magazyn kluczy PKCS #12:

openssl pkcs12 -export -in cert.pem -inkey key.pem > server.p12

Następnie przekształć ten sklep w Magazyn kluczy Java:

keytool -importkeystore -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12

Teraz użyj server.jks na twoim serwerze SSL-enable, który zawiera certyfikat i klucz prywatny.

 47
Author: erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-04 19:03:58