りんけーじ - blog

ℹ️本記事は古いコンテンツを変換して表示しています。

表示が崩れたり、リンクが正しくない可能性があります。ご了承ください。

2017/05/13 10:05 : SAN付きSSL証明書を作る

サーバが複数の名前を持つときに使いたい、SSL証明書のSAN(Subject Alternative Name)。どこを見ても微妙に気に入らなかったので自分流に。

サーバが複数の名前を持つときに使いたい、SSL証明書のSAN(Subject Alternative Name)。どこを見ても微妙に気に入らなかったので自分流に。

まずはCSRを作る用のopenssl.conf。req_extensionsの指すセクションで、subjectAltNameを定義する。環境変数で、OPENSSL_SAN=DNS:ldap.local,DNS:server1.ldap.local とか指定して使う。違うSANで発行するためにconfigをいじらなくて良いのが重要。

openssl-req.conf:

prompt = no
string_mask = nombstr

[req]
policy = req_policy
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_policy]
localityName = optional
organizationalUnitName = optional
emailAddress = optional

[req_distinguished_name]
countryName = "JP"
stateOrProvinceName = "N/A"
#localityName = ""
0.organizationName = "my organization"
#organizationalUnitName = ""
commonName = $ENV::OPENSSL_CN
emailAddress = $ENV::OPENSSL_EMAIL

[v3_req]
subjectAltName = $ENV::OPENSSL_SAN

これでCSRにSANが組み込まれた。あとはCA側で、CSRに書かれているSANを使うようにする。

CA側で同じようにsubjectAltNameを環境変数から取らせる(同じ値を与える)ことでもできるが、非常に気に食わないので採用しない。

さて、非常に悲しいことに、CSRに書かれたSANだけを証明書に写すという設定は無く、CSRのextensionsを丸ごと信用してくっつける設定しかない。自分が発行者(CA)かつ依頼者(CSR作成者)ならよいが、少しでも "ちゃんとした" CAを運用するならこれまで以上にきちんとチェックせねばならない。(元々CNも含めてチェックしないといけないが。)

こちらは長いので要点だけ。

openssl-ca.conf:

[ca]
default_ca = CA_default

[CA_default]
# ... snip ...

# Extension copying option: use with caution.
copy_extensions = copy