OpenSSL の脆弱性 (Heartbleed Bug) に関連して、SSL サーバ証明書を再発行した件

OpenSSL に脆弱性が見つかった件に関連して、自分のところで運用しているサーバで使用中の SSL サーバ証明書 (Rapid-SSL さんを利用) を再発行したので、その手順などをメモ。

OpenSSL - Heartbleed Bug先日、この Blog でも書きましたが、OpenSSL に脆弱性が見つかった件に関連して、自分のところで運用しているサーバで使用中の SSL サーバ証明書を再発行したので、その手順などをメモ。

ちなみに、私が使用しているのは Rapid-SSL さんなので、証明書再発行手続きの方法などは SSL サーバ証明書の発行元によって異なります。

なんで SSL サーバ証明書の再発行をするの?

OpenSSL の脆弱性 (Heartbleed Bug) によって、攻撃者は 「SSL サーバ証明書」 の秘密鍵 (Private Key) を手に入れる可能性もありました。入手した秘密鍵を悪用することで、攻撃者は暗号通信を解読して盗聴を行ったり、不正な SSL サーバ証明書を発行することも可能です。

Heartbleed Bug は 2年以上前から存在していた (公表以前から気がついて黙っていた人がいるかは別として) ことが明らかになったことと、この脆弱性を悪用した攻撃はサーバ上にログが残らないため、サーバ管理者は最悪のケースを想定した対応が求められます。つまり、自分のところの秘密鍵が漏洩しているという前提で考えれば、SSL サーバ証明書の再発行が必要になるという考え方です。

もちろん、Google やら Facebook、Twitter といった超大手サービス、お金やユーザー情報を扱うようなところに比べれば、個人が運用しているようなサーバをわざわざ攻撃対象にして、盗聴したり SSL サーバ証明書を悪用するメリットや動機ってある?ってのは確かなんですけども・・・・・・ とはいえできる限りは対応はしといた方がいいですからね。

各認証局は、今回の脆弱性の問題をうけて、SSL サーバ証明書の無償再発行対応を行っていますので、SSL サーバ証明書発行元からの情報を確認してみるとよいと思います。

なお、これは対象となる SSL サーバ証明書を運用するサーバ上の OpenSSL が脆弱性 (Heartbleed Bug) の影響を受ける (or 受けていたが OpenSSL をバージョンアップした) 場合のお話です。もともと脆弱性の影響を受けていない場合は SSL サーバ証明書の再発行などは不要です。

繰り返しますが、下記は Rapid-SSL さんでの手順です。他のサービスを利用している場合は一部手順が異なりますのでご注意ください。

古い SSL サーバ証明書の情報をメモ

Rapid-SSL で再発行手続きを行う前に、現状使われている SSL サーバ証明書の情報について、いくつかをメモっておく必要があります。詳しくは Rapid-SSL の公式サイト内の下記に書かれていますが、

脆弱性の影響を受ける場合、ここで表示される証明書情報の「Serial number」、「(有効期限開始日)Valid from」を必ずメモしておいて下さい。失効化の際に必要になります。

OpenSSL の脆弱性対策について(4月13日更新) から引用

「ここで表示される」 が何を指すかというと、GeoTrust が提供する SSL ツールボックス (下記) でチェックした結果に表示される情報です。

この情報は、再発行手続きによって発行された新しい SSL サーバ証明書をインストール後、それまで脆弱性のある環境で使われていた 「古い SSL サーバ証明書」 を失効させる手続きの際に必要になります。

SSL サーバ証明書の再発行手続き

この辺は SSL サーバ証明書の更新時に行う作業とほぼ同じです。今回は古い SSL サーバ証明書といってもまだ有効期限内なので、新しい証明書の稼働確認後にそれを失効させる手続きがプラスされていますけども。

手順的には、

  1. 古い (現在稼働中の) SSL サーバ証明書の情報をメモ (前述のとおり)
  2. サーバ上で新しい秘密鍵と CSR の生成
  3. Rapid-SSL の管理画面から上記の新しい CSR を使用して再発行手続き
  4. 再発行された SSL サーバ証明書をインストール
  5. Web サーバを再起動
  6. SSL サーバ証明書が更新されたことを確認
  7. 古い SSL サーバ証明書の失効手続き

となります。

新しい秘密鍵と CSR の生成

ということで、CentOS 6 の場合ですが、古い秘密鍵 (server.key) が置いてある場所 (/etc/httpd/conf/ssl/ を想定) に、新しい名前 (server-2014.key) で秘密鍵を生成します。ファイル名は任意というか例です。

# cd /etc/httpd/conf/ssl/
# openssl genrsa -aes256 2048 > server-2014.key
Generating RSA private key, 2048 bit long modulus
......+++
......+++
e is 65537 (0x10001)
Enter pass phrase:[パスフレーズ]
Verifying - Enter pass phrase:[パスフレーズ再度]

そしたら、その秘密鍵を使って CSR を作成します。途中の設問にでてくる 「Country Name」 は日本なら 「JP」 ですが、それ以外は各環境に合わせて入力します。「Common Name」 は間違いのないように確認しましょう。

CSR も古いものを上書きしないようにファイル名を変えている (server-2014.csr) 例です。

# openssl req -new -key server-2014.key -out server-2014.csr
Enter pass phrase for server-2014.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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shibuya-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:info@example.com
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

CSR が生成されたら、中身をコピーします。

cat server-2014.csr

などとして中身を表示し、内容をすべてコピーしましょう。

SSL サーバ証明書の再発行手続き

Rapid-SSL の証明書ステータス画面から、再発行手続きに進むと、CSR を貼り付ける場所がありますので、先ほどコピーした CSR をすべて貼り付け、「CSR内容確認」 に進み、問題なければ再発行依頼を出します。

Rapid-SSL - SSL サーバ証明書の再発行手続き

すぐに 「SSL サーバ証明書発行承認願い」 というメールが届きますので、指示に従って承認作業を行います。

通常は承認作業後、数分で 「SSL サーバ証明書発行完了のお知らせ」 というメールが届き、新しい SSL サーバ証明書が送られてきますので、文面に書かれている 「SSL サーバ証明書」 と 「中間証明書」 をコピーしておきましょう。

再発行された SSL サーバ証明書のインストール

あとはインストール。

先ほどの秘密鍵と同じ場所に

vi server-2014.crt
vi rapidssl-chain-2014.crt

として、サーバ証明書 (server-2014.crt) と中間証明書 (rapidssl-chain-2014.crt) をそれぞれ貼り付け、保存します。

これで、サーバ上には下記の 3つが揃いました。

  • server-2014.key (秘密鍵)
  • server-2014.crt (サーバ証明書)
  • rapidssl-chain-2014.crt (中間証明書)

次に秘密鍵からパスフレーズを抜いておきます。

# openssl rsa -in server-2014.key -out server-2014.key
Enter pass phrase for server-2014.key:[パスフレーズ]
writing RSA key

あとは、ssl.conf の設定を修正します。

vi /etc/httpd/conf.d/ssl.conf

SSLCertificateFile、SSLCertificateKeyFile、SSLCertificateChainFile のパスをそれぞれ新しいものに変更して保存して、

<VirtualHost *:443>
  DocumentRoot /var/www/html/example.com
  ServerName example.com:443
  SSLEngine on
  SSLCertificateFile /etc/httpd/conf/ssl/server-2014.crt
  SSLCertificateKeyFile /etc/httpd/conf/ssl/server-2014.key
  SSLCertificateChainFile /etc/httpd/conf/ssl/rapidssl-chain-2014.crt
  <Directory "/var/www/html/example.com">
    ・・・省略・・・
  </Directory>
</VirtualHost>

最後に Web サーバ (Apache) を再起動します。

/etc/rc.d/init.d/httpd restart

Web サイトを確認し、SSL サーバ証明書の有効期限等が新しくなっていることを確認して問題なければひとまず終わり。

新しい SSL サーバ証明書の確認

前述した、GeoTrust が提供する SSL ツールボックスでチェックして確認することも可能です。正常に更新されていれば、シリアルナンバーや有効期限が更新されているはずです。

古い SSL サーバ証明書の失効手続き

最後に古い SSL サーバ証明書の失効手続きを行います。手順は下記のページを参考に。ここで最初の手順でメモっておいた古い SSL サーバ証明書の情報が必要です。

間違っても再発行された新しい方の証明書を失効手続きしたり、証明書を再発行する前に失効手続きをしたりしないようにしましょう。

関連エントリー

記事をここまで御覧頂きありがとうございます。
この記事が気に入ったらサポートしてみませんか?