SSL更新

今回はssl更新の記事です。

インフラの方々は作業されたことがあると思いますが私は初挑戦です!

macで作業します。

バージョンを確認

1
2
[astel@astel-no-MacBook-Pro ] $ openssl version
OpenSSL 0.9.8zg 14 July 2015

秘密鍵作成のための乱数ファイルを生成します。

1
2
3
4
5
6
7
[astel@astel-no-MacBook-Pro ] $ dd if=/dev/urandom of=rand.dat bs=1k count=4
4+0 records in
4+0 records out
4096 bytes transferred in 0.000492 secs (8327615 bytes/sec)

[astel@astel-no-MacBook-Pro ] $ ls
rand.dat

作成した乱数ファイルから秘密鍵を生成します。

途中で秘密鍵のパスワードを入力します。

1
2
3
4
5
6
7
8
9
10
11
[astel@astel-no-MacBook-Pro ] $ openssl genrsa -rand rand.dat -des3 2048 > private_key.pem
4096 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
..........+++
.......+++
e is 65537 (0x10001)
Enter pass phrase: (パスワード入力
Verifying - Enter pass phrase: (もういちど入力

[astel@astel-no-MacBook-Pro ] $ ls
private_key.pem rand.dat

CSRを作成します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[astel@astel-no-MacBook-Pro ] $ openssl req -new -key private_key.pem -out csr.pem
Enter pass phrase for private_key.pem: (上記で入力した秘密鍵のパスワードを入力
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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shinjuku-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Maverick Inc.
Organizational Unit Name (eg, section) []:Development
Common Name (e.g. server FQDN or YOUR name) []:*.mvrck.co.jp
Email Address []:

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

[astel@astel-no-MacBook-Pro ] $ ls
csr.pem     private_key.pem rand.dat

作成したCSR(csr.pem)を申請サイトへ貼り付けて申し込みます。

今回発行されたSSL証明書を_.mvrck.co.jp.crtと名前を変えてサーバへ設置していきます。

対象サーバは全てnginxで動いてます。設定を見てみましょう。

1
2
3
$ grep ssl_certificate /etc/nginx/conf.d/mvrck.conf
    ssl_certificate /etc/ssl/nginx/_.mvrck.co.jp.crt;
    ssl_certificate_key /etc/ssl/nginx/_.mvrck.co.jp.key;

ふむふむ /etc/ssl/nginx/ 以下に置かれているようですね。

ここで_.mvrck.co.jp.keyなんて作ってないぞ と思いましたがssl_certificate_key … なるほど 秘密鍵??

疑問に思いながら最初の方に作成した秘密鍵 private_key.pem をリネームして設置しました。

$ mv private_key.pem _.mvrck.co.jp.key

また権限がnginxにしないとうまいこと動いてくれなかったのでchown nginxで設定します。

よしこれでとりあえず$ nginx -t で確かめてみよう!

1
2
$ nginx -t
Enter PEM pass phrase:

秘密鍵の入力を求められました。パスワードを入力して

1
2
syntax is ok
test is successful

と設定自体はよさそう。restartさせてみる。

1
2
3
4
5
6
$ /etc/init.d/nginx restart
 * Checking nginx' configuration ...
Enter PEM pass phrase:                                                                                                                                                                                                 [ ok ]
 * Stopping nginx ...                                                                                                                                                                                                  [ ok ]
 * Starting nginx ...
Enter PEM pass phrase:   

と,これでweb上で確認するとしっかり更新されていました!

このEnter PEM pass phrase:ですが毎回入力せずにも設定できるようです。

例としてパスフレーズを聞かれないようにするには

1
2
3
$ openssl rsa -in private_key.pem -out _.mvrck.co.jp.key
Enter pass phrase for private_key.pem:
writing RSA key

とすることで_.mvrck.co.jp.keyというパスフレーズなしのkeyが作成されます。

設置し直して$ nginx -t等で試してみるとパスフレーズなしでもできました。

私はweb上でssl証明書をみて更新されていると確認したのですがcuiでも出来るよということで教えてもらいました。

1
$ openssl s_client -connect www.mvrck.co.jp:443 < /dev/null 2> /dev/null | openssl x509 -noout -startdate -enddate

これで無事更新完了です。

無事といいつつ実はCommon Nameを間違えて発行して色々あったのですがそれはまた別のお話…..