私はopensslを使用して自己署名証明書を作成しています。生成した証明書でこのエラーが発生しています:javax.net.ssl.SSLHandshakeException:Java.security.cert.CertificateException:No subject alternative names present
証明書の作成中に「サブジェクトの別名」を指定する方法を知っていますか?これは私がキーストアを生成する方法です:
Sudo $Java_HOME/bin/keytool -genkey -dname "CN=192.168.x.xxx, OU=I, O=I, L=T, ST=On, C=CA" -alias Tomcat -validity 3650 -keyalg RSA -keystore /root/.keystore -keypass abcd -storepass abcd
キーを生成するには:
openssl s_client -connect 192.168.x.xxx:8443 2>/dev/null
助けてください!ありがとう!
この質問 は、サブジェクトAltのIPアドレスに関するものです。名前とコマンドは似ています(ホスト名にDNS
エントリを使用し、IPアドレスにIP
エントリを使用)。
自分を引用するには:
keytool
を使用している場合、 Java 7、keytool にはサブジェクトの別名を含めるオプションがあります(-extのドキュメントの表を参照): ext san = dns:www.example.comまたは-ext san = ip:10.0.0.1
このコマンドを使用するには、Java 7のkeytool
のみが必要です。キーストアを準備したら、以前のバージョンのJavaで動作するはずです。
(この回答の残りの部分では、OpenSSLでこれを行う方法についても言及していますが、使用しているものではないようです。)
Keytoolの追加引数-ext SAN=dns:abc.com,ip:1.1.1.1
でIPとDNSの両方を指定できます
例:
keytool -genkeypair -keystore <keystore> -dname "CN=test, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown" -keypass <keypwd> -storepass <storepass> -keyalg RSA -alias unknown -ext SAN=dns:test.abc.com,ip:1.1.1.1
CSRを生成する場合、-ext属性を再度指定して、CSRに挿入することができます。
keytool -certreq -file test.csr -keystore test.jks -alias testAlias -ext SAN=dns:test.example.com