CSRと秘密鍵のペアを確認する方法 | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

SSL証明書を作成する際に作る、CSR(署名リクエスト)と秘密鍵ですが、そのペアを誤ると当然使い物にならなかったりします。

オレオレ証明書の場合はやり直しがききますが、認証局に申し込むSSL証明書の場合は、取り返しのつかない事態にもなりかねません。

また、複数のFQDNのCSRを作る場合、作業場所や操作を意識しながら行わないとどの秘密鍵とCSRがペアなのかわからない事態にもなってしまいます。


ここでは、申し込む前にきちんとCSRと秘密鍵のペアが正しいかを確認する方法を書いておきます。



秘密鍵とCSRの作成


まずは、秘密鍵とCSRを作成してみます。

この辺りの手順は、各認証局のマニュアルページにも書かれていたりするのであまり詳しく書きません。


# openssl genrsa -rand /dev/urandom -des3 -out private.key 1024

2048 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
............++++++
....++++++
e is 65537 (0x10001)
Enter pass phrase for private.key:
Verifying - Enter pass phrase for private.key:

これで、private.keyという秘密鍵のファイルができました。

秘密鍵を作成する際に入力したパスフレーズをきちんと覚えて起きます。


# openssl req -new -key private.key -out hoge.csr

Enter pass phrase for private.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:Shibuya
Organization Name (eg, company) [My Company Ltd]:hogehoge inc.
Organizational Unit Name (eg, section) []:hoge section
Common Name (eg, your name or your server's hostname) []:www.hogehoge.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

これで、CSR(hoge.csr)ができました。



秘密鍵とCSRの確認


では、本題の2つのペアが正しいか(その秘密鍵から作られたCSRか)を確認していきます。


# openssl rsa -in private.key -text
Enter pass phrase for private.key:
Private-Key: (1024 bit)
modulus:
    00:bc:ac:01:68:65:7b:2b:05:48:ad:f6:af:60:2f:
    22:48:4b:59:2d:03:18:81:d5:78:da:ac:23:cf:55:
    39:bb:c7:a2:2d:f2:7a:73:b2:66:c5:1c:bf:20:59:
    c4:ae:c4:01:f5:eb:68:a2:d8:93:b1:04:f2:0e:ee:
    9a:5f:b9:4b:b6:6b:c6:fa:a3:c9:9a:d0:36:39:db:
    ba:8d:1f:ff:1e:74:69:f8:9e:de:1a:d7:b5:2e:c5:
    27:5b:5d:fa:8c:6e:e9:ac:79:e5:dd:a5:77:ff:1a:
    ec:b7:b7:49:6b:f2:69:ad:6a:1f:37:1b:f5:77:d6:
    c1:57:0f:f9:69:03:8c:1c:7d
publicExponent: 65537 (0x10001)
- snip -

秘密鍵を作成した際のパスフレーズが正しければ、内容が確認できます。


# openssl req -in hoge.csr -text
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, ST=Tokyo, L=Shibuya, O=hogehoge inc., OU=hoge section, CN=www.hogehoge.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:bc:ac:01:68:65:7b:2b:05:48:ad:f6:af:60:2f:
                    22:48:4b:59:2d:03:18:81:d5:78:da:ac:23:cf:55:
                    39:bb:c7:a2:2d:f2:7a:73:b2:66:c5:1c:bf:20:59:
                    c4:ae:c4:01:f5:eb:68:a2:d8:93:b1:04:f2:0e:ee:
                    9a:5f:b9:4b:b6:6b:c6:fa:a3:c9:9a:d0:36:39:db:
                    ba:8d:1f:ff:1e:74:69:f8:9e:de:1a:d7:b5:2e:c5:
                    27:5b:5d:fa:8c:6e:e9:ac:79:e5:dd:a5:77:ff:1a:
                    ec:b7:b7:49:6b:f2:69:ad:6a:1f:37:1b:f5:77:d6:
                    c1:57:0f:f9:69:03:8c:1c:7d
                Exponent: 65537 (0x10001)
- snip -

まずは、Subjectの内容がCSR作成の際に指定しているものかを確認します。


- 秘密鍵とCSRのペアが正しいかの確認

先ほどの秘密鍵とCSRの内容を確認した際に表示される、modules(CSRの場合はModules)の内容が一致するかを確認します。

該当箇所だけを抜き出し、別のファイルに書き出して余計なスペースを削除し、diffコマンドで見分ければ早いでしょう。

一致していれば、その秘密鍵から作成したCSRであることがわかります。



認証局に申し込むSSL証明書はタダではないので、その作業には神経を使いますから、事前にきちんと確認を取っておいた方がよいでしょうね。