share facebook facebook2 twitter menu hatena pocket slack

2015.08.18 TUE

SAN対応 x.509 証明書を取得するためのCSRを作成する

齋藤 康征

WRITTEN BY齋藤 康征

SAN is ナニ

SubjectAltNameの意で、複数のDNS名(ホスト名)を扱う場合に利用するx.509証明書のオプションです。
これを利用することにより、複数のホスト名を取り扱うx.509証明書を作成できます。

SAN対応 x.509 証明書を作成する

ここでは以下の2つの階層で利用できる x.509 証明書を発行するためのCSRを作成します。
– test.local
– *.test.local

openssl-san.conf を作成する

以下の内容でopenssl-san.conf(名称は特に問わない)を作成します。

[req]
distinguished_name=req_distinguished_name
req_extensions=v3_req

[ v3_req ]
basicConstraints=CA:FALSE
keyUsage=nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=@alt_names

[req_distinguished_name]
countryName=Country Name (2 letter code)
countryName_default=JP
stateOrProvinceName=State or Province Name (full name)
stateOrProvinceName_default=Kyoto
localityName=Locality Name (eg, city)
localityName_default=Kyoto
organizationalUnitName=Organizational Unit Name (eg, section)
organizationalUnitName_default=my home
commonName = saitara
commonName_max  = 64

[alt_names]
DNS.1=%HOSTNAME%
DNS.2=*.%HOSTNAME%

ホスト名を環境変数に定義する

後のワンライナーで利用するため、環境変数 HOSTNAME に証明書を作成するためのホスト名を設定します。

$ export HOSTNAME=test.local

CSRを作成する

先に設定した環境変数 HOSTNAME を有効に活用し、取得したい内容のCSRを作成します。
C/ST/L/O/OUなどはご自身の組織などにあわせて変更して下さい。

$ openssl req -new -newkey rsa:2048 -keyout ${HOSTNAME}.key.nopass 
    -sha256 -nodes -extensions v3_req -subj 
    "/C=JP/ST=Tokyo/L=Minato-ku/O=Iret inc./OU=cloudpack/CN=${HOSTNAME}" -out ${HOSTNAME}.csr 
    -config <( cat openssl-san.conf|sed "s:%HOSTNAME%:${HOSTNAME}:g" )

以下のようなメッセージが出て、CSRが作成されます。

Generating a 2048 bit RSA private key
....................+++
.............+++
writing new private key to 'test.local.key.nopass'
-----

作成されたものを確認する

CSR

作成されたCSRを確認します。
(以下に示すものはこのエントリーのために試験的に作成したもので、実際には使われてないものです)

$ openssl req -noout -text -in test.local.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, ST=Tokyo, L=Minato-ku, O=Iret inc., OU=cloudpack, CN=test.local
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:e2:b8:a1:91:fa:ca:6b:ad:0d:bb:5a:7b:7c:66:
<略>
                    19:75:31:da:e5:23:1c:67:d9:fa:a7:4a:4a:44:23:
                    d1:9d
                Exponent: 65537 (0x10001)
        Attributes:
        Requested Extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name:
                DNS:test.local, DNS:*.test.local
    Signature Algorithm: sha256WithRSAEncryption
        a1:27:55:64:e6:f6:15:8a:cb:f0:88:70:cc:24:f3:26:ad:ef:
<略>
        c2:51:ba:96:86:97:29:f8:40:5f:f2:33:7d:0e:a2:0a:e5:96:
        8c:5a:89:39

ここで

            X509v3 Subject Alternative Name:
                DNS:test.local, DNS:*.test.local

と出ているので期待する内容でのCSRであることが確認できます。

秘密鍵

作成した秘密鍵にはパスフレーズはないため、必要に応じてパスフレーズの設定をして下さい。

元記事はこちら

SAN対応 x.509 証明書を取得するためのCSRを作成する

齋藤 康征

齋藤 康征

cloudpackの @saitara (齋藤 康征)です。 大きなトラフィックと大量のアクセスを好物としてます。