web-dev-qa-db-ja.com

サブジェクトの別名をSSL証明書に追加する方法は?

私は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

助けてください!ありがとう!

40
Sapphire

この質問 は、サブジェクト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でこれを行う方法についても言及していますが、使用しているものではないようです。)

59
Bruno

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
21
Chandra Divi

CSRを生成する場合、-ext属性を再度指定して、CSRに挿入することができます。

keytool -certreq -file test.csr -keystore test.jks -alias testAlias -ext SAN=dns:test.example.com

完全な例: keytoolを使用してSANでCSRを作成する方法

6
MrPatol