私はソケットクライアントとサーバーソケットを持っています。サーバーには、キーを含むキーストアがあります。
keytool -genkey -alias mystuff -keyalg RSA -keystore keystore.jks -keysize 2048
このページには、上記のコマンドを実行するとキー ペアが生成されると書かれています。https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html
このコマンドを実行すると:
keytool -list -v -keystore keystore.jks
私は見えます:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: mystuff
Creation date: 25-Jun-2015
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Richard, OU=OSS, O=OSS, L=Yat, ST=Hamp, C=GB
Issuer: CN=Richard, OU=OSS, O=OSS, L=Yat, ST=Hamp, C=GB
Serial number: 48ee5103
Valid from: Thu Jun 25 17:09:18 BST 2015 until: Sun Jun 19 17:09:18 BST 2016
Certificate fingerprints:
MD5: 60:63:F2:41:A3:AB:DB:E0:63:F9:B0:E4:C8:2C:90:D4
SHA1: 52:8A:F7:76:82:B7:E9:BE:D3:4E:4A:3C:DD:CF:8A:58:A6:9F:70:DE
SHA256: 3C:80:C1:0E:E7:30:DD:69:9F:97:A9:02:F9:4E:6E:57:84:82:C5:22:0E:7F:7A:EE:C1:D2:7A:8A:45:A3:86:79
Signature algorithm name: SHA256withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 42 4F 07 15 3A 9A 8C 59 6A 65 EB B6 62 FD 77 C5 BO..:..Yje..b.w.
0010: AC E3 B2 4F ...O
]
]
私が見ているのは証明書ですが、 entrytype: PrivateKeyEntry はどういう意味ですか?
だから... Javaサーバーをロードすると:
java -Djavax.net.ssl.keyStore=keystore.jks -Djavax.net.ssl.keyStorePassword=somepassword EchoServer
SSLServerSocket のセットアップに使用できるように、キーストアを指すことができます。
クライアント側では、クライアントはこのコマンドを使用してそのキー ストアからエクスポートされた crt を必要とするだけですか?
keytool -export -alias mystuff -file mystuff.crt -keystore keystore.jks
または、Java ソケット間で安全な SSL を有効にするために何か他のものが必要ですか。
追加情報 標準 Java に関する注意事項 SSL を使用してサーバーとクライアントを実行する
http://stilius.net/java/java_ssl.php
最初に、前に作成した証明書ファイルを作業ディレクトリにコピーし、これらのパラメーターを使用してサーバーを実行します (証明書を作成する別のオプションを指定した場合は、keyStore 名および/または trustStrorePassword を変更する必要があることに注意してください。
java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 EchoServer
前に作成した証明書ファイルを作業ディレクトリに再度コピーし、これらのパラメーターを使用してクライアントを実行します (証明書を作成する別のオプションを指定した場合は、keyStore 名および/または trustStrorePassword を変更する必要があることに注意してください。
java -Djavax.net.ssl.trustStore=mySrvKeystore -Djavax.net.ssl.trustStorePassword=123456 EchoClient
SSL デバッグ情報が必要な場合は、サーバーおよび/またはクライアントの実行時に次のパラメーターを追加するだけです。
-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl
javax.net.ssl.keyStore - アプリケーション プロセス独自の証明書と秘密鍵を含む Java キーストア ファイルの場所。Windows では、指定されたパス名はバックスラッシュの代わりにスラッシュ (/) を使用する必要があります。
javax.net.ssl.keyStorePassword - javax.net.ssl.keyStoreで指定されたキーストア ファイルから秘密鍵にアクセスするためのパスワード。このパスワードは、鍵ストア・ファイルのロックを解除するため (保管パスワード) と、鍵ストアに保管された秘密鍵を復号化するため (鍵パスワード) の 2 回使用されます。
javax.net.ssl.trustStore -このアプリケーション プロセス (トラスト ストア) によって信頼された CA 証明書のコレクションを含む Java キーストア ファイルの場所。Windows では、指定されたパス名はバックスラッシュの代わりにスラッシュ / を使用する必要があります。
If a trust store location is not specified using this property, the SunJSSE implementation searches for and uses a keystore file in the following locations (in order):
$JAVA_HOME/lib/security/jssecacerts
$JAVA_HOME/lib/security/cacerts
javax.net.ssl.trustStorePassword - javax.net.ssl.trustStoreで指定されたキーストア ファイルのロックを解除するためのパスワード (ストア パスワード)。
javax.net.ssl.trustStoreType - (オプション) Java キーストア ファイル形式の場合、このプロパティの値は jks (または JKS) です。このプロパティのデフォルト値はすでに jks であるため、通常はこのプロパティを指定しません。
javax.net.debug - SSL/TLS レイヤーのロギングを有効にするには、このプロパティを ssl に設定します。
リチャード