web-dev-qa-db-ja.com

OpenSSLとkeytoolの違い

OpenSSlまたはKeytoolの使用とそれらによる証明書の生成の違いについて疑問に思っていました。 KeytoolはJavaコミュニティで使用されていると思いますが、リモートでJavaに接続していない人は、OpenSSLを使用して生成しています。公開鍵、秘密鍵、証明書。

OpenSSLを使用する場合、キーと証明書を個別に生成する必要があると思いますが、keytoolは、一種のブリーフケースを提供するkeystoreを生成できますキーと証明書を含めることができます。

質問は:私が正しいと思うものは何ですか?

それが問題なら、私は窓を使います。そして私は言及しています: Java Keytool?)でOpenSSLを使用するにはどうすればよいですか?

15
Sachin Verma

つまり、どちらも暗号鍵生成ツールですが、keytoolにはJavaの優先鍵ストレージファイル形式であるKeyStoreを操作する追加機能があります。

Javaは、KeyStore(証明書のみが含まれる場合はTrustStoreとも呼ばれます)に格納されている鍵と証明書を使用することを強く推奨します。 Javaで簡単なPEM/CER/CRT/PKCS/etcファイルを操作するには、すべての場合、可能ですが簡単ではありません。 Java=で暗号をコーディングする場合の意図と目的は、キーストアを使用することになります。

Keytoolは、Java KeyStoresと連携するツールです。これは KeyStoresを作成する でき、内部のキーと証明書を操作できます。 キーを作成することもできます。証明書に署名 なので、これは鍵の生成とKeyStore-file-administrationツールの両方です。

OpenSSLは標準形式(PEM/CER/CRT/PKCS/etc)で動作しますが、KeyStoreファイルは操作しません。 OpenSSLを使用してキーおよび/または証明書を生成し、keytoolを使用してそのキー/証明書をKeyStoreにインポートする ですが、OpenSSLを使用してキー/証明書を直接KeyStoreに配置することはできません。

(OpenSSLは、keytoolよりも幅広い機能を備えています-対称暗号化を実行し、SSLネットワーククライアントおよびサーバーとして機能し、より多くのフォーマットを処理します。KeyStoreを話すことはありません。)

25
gowenfawr

OpenSSLとkeytoolはどちらも同じ目的で、キーと証明書(チェーン)を生成/保存します。 Javaは、そのキーストア(JKS)に含まれる証明書/キーでのみ機能します。これらの証明書とキーは、opensslではなくkeytoolライブラリを使用して生成されます。

あなたが正しく指摘したように、keystoolは、それが生成した証明書とキーを保存するために常にキーストアを必要としますが、opensslの場合はそうではありません。 OpenSSLを使用して同様のコンテナー、つまりPKCS12(.p12)を作成することもできます。これは、(Javaのキーストアと同じように)キーと証明書を含むパスワードで保護されたコンテナです。ただし、Javaとは互換性がありません... Javaアプリケーションが証明書で機能できるようになる前に、.p12コンテナを.jksに変換する必要があります。

4
Stef Heylen

最も一般的なJava Keytool Keystoreコマンド

Java Keytoolは、キーと証明書をkeystoreと呼ばれる場所に格納します。デフォルトでは、Javaキーストアはファイルとして実装されます。秘密鍵をパスワードで保護します。

OpenSSLがfirstRSA秘密キー(1024ビットRSAキーを生成するのに対し、3DESを使用して暗号化され、PEM形式で保存されるため、ASCII text)。 その後、証明書( [〜#〜] csr [〜#〜] )が作成されます

0
user45139