社内でのJira/Confluenceの導入に適した証明書を取得しようとしています。人々は、ホスト名またはFQDNから、異なる方法でそれらにアクセスします。 Java 7のキーツールを使用しているので、サーバーの別名機能にアクセスできます。
-ext san=dns:jira
...そして私はそれを渡します...
jira.example.com
...証明書を生成するときのCNとして。次に、署名要求を生成し、CSRをWin2k8r2 PKIに引き渡してcertreq
を取得し、鍵に署名を取得して、鍵を鍵ストアにインポートします。
上記で述べたように設定すると、私のブラウザー(Chrome、Firefox、Safari)はjira
が唯一の有効な名前であると考えているようです。証明書を検査すると、CNはFQDNを示しています。
ext
をドロップすると、FQDNであるCNが使用されます。
複数のext
ステートメントがある場合、それは最後のステートメントを使用するだけで、1つのext
エントリの下に複数のDNS:foo
をさまざまな句読点とともに文字列化しようとしました。
私が遭遇したもう1つの角度は、FQDNに対して301を実行するようにWebサーバーをセットアップすることです。私もこれで大丈夫ですが、Tomcatに悩まされているため、「Apache/nginxへの切り替え」は機能しません。 これ は、Tomcatでそのようなことをするために出くわした唯一のドキュメントのようですが、3歳になり、1日の終わりです。彼らはその機能をTomcat6に追加しましたか?
私はこの質問がかなり古いことに気づきましたが、それが役立つと思うかもしれない人のために、私が何がうまくいくかについて言及します:
-ext san=dns:jira,dns:jira.example.com
ところで、必要に応じてIPアドレスを追加することもできます。私は個人的に開発用コンピューターに次のものを使用しています:
keytool -certreq ... -file server.csr -keystore server.keystore ... -ext san=dns:localhost,dns:myComputerName,ip:127.0.0.1,ip:::1
注:私はJava8 keytoolを使用しています。これがJava7 keytoolでも機能することを願っていますが、テストしていません
OpenSSL
を使用し、keytool
を使用しないでマルチドメイン証明書を生成し、キーと証明書をJavaで使用するキーストアに変換しますTomcat。次の例は自己署名証明書を生成しますが、「実際の」証明書に適合させるのは簡単です。
上記のリンクのガイドに従ってopenssl.cnfを生成し、次のコマンドを実行します。
# Generates a self-signed certificate + key, omit if you already have one
openssl req -config openssl.cnf -x509 -days 3650 -newkey rsa:2048 \
-out self-signed-certificate.pem -keyout pub-sec-key.pem
# Remove passphrase from key
openssl rsa -in pub-sec-key.pem -out new.key
# Generate PKCS12 keystore
openssl pkcs12 -export -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES \
-export -in self-signed-certificate.pem -inkey new.key -name alias \
-out keystore.p12
# Convert PKCS12 to JKS
keytool -importkeystore -destkeystore keystore.jks -deststoretype JKS \
-srcstoretype PKCS12 -srckeystore keystore.p12
alias値に注意して-name
上記の例では。これは、Tomcat
に渡す必要がある証明書の名前です。
完了のために、SANでの証明書の発行が認証局とどのように連携するかを示します。
SAN = email:copy
...
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=${ENV::SAN}
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
次のコマンドを実行して、SANを含むKey + CSR(テストされていない)を生成します。
SAN="DNS: domain1.example.com, DNS: domain2.example.com" openssl req \
-config /path/to/openssl.conf \
-subj "/C=XX/ST=XX/L=xxx/O=My Org/OU=My OU/CN=main.example.com" \
-newkey rsa:2048 -out file.csr -keyout out.key \
-infiles /path/to/csr/file.csr
次のコマンドを実行して証明書を発行します。
SAN="DNS: domain1.example.com, DNS: domain2.example.com" openssl ca \
-config /path/to/openssl.conf -policy policy_anything \
-subj "/C=XX/ST=XX/L=xxx/O=My Org/OU=My OU/CN=main.example.com" \
-infiles /path/to/csr/file.csr
CSRにSAN=サブジェクトの代替名が埋め込まれていることを確認するには、keytoolを使用してCSRを印刷します。
keytool -printcertreq -file test.csr
うまくいった場合、次のような結果になります。
#1: ObjectId: 2.5.29.17 Criticality=false
SubjectAlternativeName [
DNSName: test.example.com
DNSName: test
]
注-上記の2つのエントリ(test.example.comとtest)を取得するには、「明日」の回答に「-ext san = dns:test.example.com、dns:test」と記載されているようにCSRを作成する必要がありました。 」.
コマンドラインで0個以上の「-ext」エントリを渡すことができることを示す、誤解を招くkeytoolのドキュメント[{-ext ext} *]には従わないでください。
-ext san=dns:test.example.com -ext san=dns:test
これは機能せず、最後の拡張DNSエントリ(san = dns:test)のみを取得します。