昨日SSL証明書が期限を迎えるので、入替作業をしました。
秘密鍵を作成しCSRファイルを構築した後、認証機関に証明書ファイルの作成を依頼、一連の手続き後できあがった証明書ファイルをApache2環境に適用し、Webサーバを再起動したところWebページが立ち上がらなくなってしまいました。
終業時間は17:15なのですが、悪戦苦闘すること21:15。ボロボロになりながら解決できず、対応は翌日となってしまいました。
翌朝続きの作業を始めたものの、まだ解決できません。
ほとんどあきらめかけたものの、あきらめてしまうと業務上とってもまずい状況になることから、Googleの検索キーのアプローチを昨日と少し変えてみました。
その結果、結論から言うと解決できたので、それまでの過程をアップしたいと思います。
======
【前提】
私の管理する環境は、
OS:CentOS release 6.7
apache:Apache/2.2.15
OpenSSL: OpenSSL 1.0.1e-fips 11 Feb 2013
となっています。
【証明書の設置場所】
/etc/httpd/conf.d/ssl.conf内に定義
#生成された証明書ファイル
SSLCertificateFile /etc/httpd/conf/ssl/newcert.pem
#証明書の元になった秘密鍵
SSLCertificateKeyFile /etc/httpd/conf/ssl/newkey.pem
#証明書生成先から取得した中間ファイル
SSLCACertificateFile /etc/pki/tls/certs/inca.pem
【証明書生成過程】
証明書生成過程について説明します。私の所属先では費用の関係で証明書の期間を1年とするため、
面倒ではありますが、この作業が1年に1回発生してしまいます。
なお、サーバを新規に稼働させてからもうずいぶん経過しているため、そろそろWebサーバの再構築時期に
来ていることも事実です。
では手順を説明します。
1.サーバに接続
Tera Termを使用しています。サーバにログインします。
作業場所として/tmpに移動します。
# cd /tmp
2.議事乱数情報の生成
OpenSSLコマンドを利用し秘密鍵作成のための擬似乱数の情報を生成します。
私の環境ではopensslは/usr/binディレクトリにあるため、/usr/bin/opensslで実行します。
ここでは md5 ダイジェスト値を擬似乱数として使用する例を説明します。
# /usr/bin/openssl md5 * > rand.dat
※/tmp下にファイルが何もないため1回目の実行ではエラーが発生します。そのため上記コマンドを2回実行します。
3.秘密鍵の生成
/user/bin/openssl genrsa -rand (擬似乱数ファイル名) -des3 (キー長) > (秘密鍵ファイル名)
の書式で生成します。
トリプルDESを使い、2048bit の秘密鍵(ファイル名:newkey.pem)を作成する場合
例: openssl genrsa -rand rand.dat -des3 2048 > newkey.pem
となります。
# /usr/bin/openssl genrsa -rand rand.dat -des3 2048 > newkey.pem
16161 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
...........................................+++
.................+++
e is 65537 (0x10001)
Enter pass phrase: ******★
Verifying - Enter pass phrase: ******★
※******★はパスフレーズ
ここで入力するパスフレーズは、絶対に忘れないように大切に管理してください。
また、指定したファイル名 (newkey.pem) で、秘密鍵ファイルが作成されます。
作成した秘密鍵ファイルからCSRを生成しますので、誤って削除しないようにしてください。
4.CSRファイルの生成
生成された秘密鍵をもとにCSRファイルを生成します。
# /usr/bin/openssl req -new -key newkey.pem -out newcsr.pem
Enter pass phrase for newkey.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) [XX]:JP◆
State or Province Name (full name) []:Osaka◆
Locality Name (eg, city) [Default City]:Osaka◆
Organization Name (eg, company) [Default Company Ltd]:"会社名"▲
Organizational Unit Name (eg, section) []:”所属”部署名▲
Common Name (eg, your name or your server's hostname) []:”コモンネーム”▲
Email Address []:●
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:●
An optional company name []:●
※****★はパスフレーズ
◆入力指定項目
▲入力指定項目(個人情報)
●入力なし項目
生成された秘密鍵(newkey.pem)は以下のような感じです。
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,FC0EA5F283B9BCCE
hQUXzOMnWh4HKasnJVvFoW01R4FUpc9hDpJujJzFMCWKJyiwR68uLOybA3+VT8Mj
dSwjl3YDIM1OuweTU9S95QuuYt5hIhq9Ton89Y226CaNI4p/NfqLLjRVH8XVWbYQ
NFG3Cgg/4xEQuUxjPAizEzIKIRCL7p0HwXU1QRQSF1s4U2YV+MiEz33XEmjxfohN
(中略)
WFIMh4tMPjFNq8a0xV3/aN7cPqNR1POHZ77sLEp6tW4wN4Ap6pb2ddhLrq2SxKeD
2HAsud5/OSkLtIP1PUr0YCVWhVgp+Hzo8zF8vyqWYn7Jjh3edD3DmCgxIbO0+Wve
WGpVzMUQKCaFgwnKQj+Z7tn2jDvlxKXMHXfexiYFT3G6hQtESrpGBborDCgwwdyl
-----END RSA PRIVATE KEY-----
生成されたCSRファイル(newcsr.pem)は、以下のような感じです。
-----BEGIN CERTIFICATE REQUEST-----
MIIC2jCCAcICAQAwgZQxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVPc2FrYTEOMAwG
A1UEBwwFT3Nha2ExHjAcBgNVBAoMFUdha2tvaG9qaW4gVG95b2dha3VlbjEnMCUG
(中略)
TJDjGnh4dp2FOh3wf9vslL+YlNIX6eZ67n1XRvtKf/SpSXSrg4AvkmF/KJgBCMuZ
89rIXJEkUct+uZzQQOo=
-----END CERTIFICATE REQUEST-----
ここでできあがったの秘密鍵を私の所属先の場合、GeoTrustのサイトに貼付け、
支払い済の情報をもとにに生成したバウチャーチケットとともに登録します。
5.apache2のSSL証明書更新作業
証明書ファイル、中間ファイルを証明書認証機関より取得します。
秘密鍵は、証明書ファイル作成のもとになったファイルを利用します。
Apacheサーバの以下のパスのファイルを入替します。手順は次の通りです。
(1)現状の証明書ファイル、中間ファイル、秘密鍵のバックアップを取得します。
(2)Webサーバのサービスを停止します。
(3)以下のパスの証明書ファイル、秘密鍵、中間ファイルを更新します。
#生成された証明書ファイル
SSLCertificateFile /etc/httpd/conf/ssl/newcert.pem
#証明書の元になった秘密鍵
SSLCertificateKeyFile /etc/httpd/conf/ssl/newkey.pem
#証明書生成先から取得した中間ファイル
SSLCACertificateFile /etc/pki/tls/certs/inca.pem
(4)Webサーバのサービスを起動します。
6.注意点
以上で作業終了と言いたいところでしたが、丸1日近く嵌ってしまいました。
再起動後、Webサービスがエラーで停止してしまうため起動できない問題が解消されなかったのです。
症状としては、ssl_error_logに出力された、下記のエラーです。
-----------------------------------------------------------
[Wed Oct 21 06:04:28 2020] [error] Init: Pass phrase incorrect
[Wed Oct 21 06:04:28 2020] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Wed Oct 21 06:04:28 2020] [error] SSL Library Error: 218640442 error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error
[Wed Oct 21 06:04:28 2020] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Wed Oct 21 06:04:28 2020] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
[Wed Oct 21 06:04:28 2020] [error] SSL Library Error: 67710980 error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib
[Wed Oct 21 06:04:28 2020] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Wed Oct 21 06:04:28 2020] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
-----------------------------------------------------------
内容としてはパスフレーズが合わないという現象です。
秘密鍵から証明書を申請したはずなのに!と疑ってみました。
この実行結果がマッチしているかどうかで確認できます。
openssl x509 -noout -moudulus -in newcert.pem | openssl md5
openssl x509 -noout -moudulus -in newkey.pem | openssl md5
実行後に表示される
(stdin)= d41d8cd98f00b204e9800998ecf8427e
の部分のチェックサムが同じであれば、マッチしていることが確認できます。
結果はマッチしていました。
でもパスフレーズが合わないという現象で、Webサーバが起動できません。
最終的にGlobalSignのホームページを参照して、補足の部分を試しにやってみて解決しました。
!!結論としては、パスフレーズを秘密鍵から削除しました。
補足の部分の
「2.秘密鍵のパスフレーズを解除」の部分の説明、
(Windows版のApacheでは、秘密鍵のパスフレーズを解除する必要があります。)
に従い秘密鍵からパスフレーズを抜き取る作業をしました。
100%確かなことかはわかりませんが、秘密鍵と証明書のパスフレーズは合致しているのですが、
昨年指定していたパスフレーズと今年作成した証明書のパスフレーズが違ったことが原因かもしれません。
そのため、秘密鍵からパスフレーズを削除し、Apacheを起動したところ起動できました。
つまり以下の秘密鍵の先頭のProc-Type:から3行を削除し、
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,E5F95DBC120BA4FA
VOFYcQeo7QClGVsbhPaJjImBUGtcTqtGJ/6mWKykyFQ2c8rGp6t6+f/ISeyNagxY
Y9ICHX2zaXpKsPDuPFg+/2yNa5tog9aelUxOhXdMw5Jt5xyhDeWOwxB9D2lEg/2/
。。。。以下省略。。。。
以下のようにしました。
-----BEGIN RSA PRIVATE KEY-----
VOFYcQeo7QClGVsbhPaJjImBUGtcTqtGJ/6mWKykyFQ2c8rGp6t6+f/ISeyNagxY
Y9ICHX2zaXpKsPDuPFg+/2yNa5tog9aelUxOhXdMw5Jt5xyhDeWOwxB9D2lEg/2/
。。。。以下省略。。。。
以上でめでたく昨日の悪夢から解放されたのでした。
※コメント投稿者のブログIDはブログ作成者のみに通知されます