Apache2.4.8以降のSSL設定の注意点

SSL対応のサイトを別サーバに移転することになったのですが、SSLの設定ではまったので記録しておきます。

Apache2.4.8以降では、中間証明書の扱いが変わったようです。
2.4.7までは中間証明書は SSLCertificateChainFile ディレクティブで指定していました。

SSLCertificateChainFile /etc/httpd/conf/ssl.crt/dvcacert.cer

Apache2.4.8以降では、以下のようにエラーとなってしまいます。SSLCertificateChainFile ディレクティブがなくなったようです。
そのかわり、SSLCertificateFileディレクティブで指定するように言われます。

$ sudo /etc/init.d/httpd configtest
AH02559: The SSLCertificateChainFile directive (/etc/httpd/conf.d/ssl.conf:122) is deprecated, SSLCertificateFile should be used instead
Syntax OK

具体的な方法をいろいろ探しましたが、以下のURLに記載のスクリプトで形式を変換して、サーバー証明書と中間証明書を結合したものをSSLCertificateFileディレクティブで指定するとよいようです。

bundle_ssl.sh

#!/bin/sh
#
# Convert PEM Certificate to ca-bundle.crt format
#

test ! $1 && printf "Usage: `basename $0` certificate" && exit 1

# Friendly Name and Underline Friendly Name with equal signs
openssl x509 -in $1 -text -noout | sed -e 's/^  *Subject:.*CN=\([^,]*\).*/\1/p;t  c' -e 'd;:c' -e 's/./=/g'
# Output Fingerprint and swap = for :
openssl x509 -in $1 -noout -fingerprint | sed -e 's/=/: /'
# Output PEM Data:
echo 'PEM Data:'
# Output Certificate
openssl x509 -in $1
# Output Certificate text swapping Certificate with Certificate Ingredients
openssl x509 -in $1 -text -noout | sed -e 's/^Certificate:/Certificate Ingredients:/'

変換シェルを実行して、証明書を連結します。

# bundle_ssl.sh /etc/httpd/conf/ssl.crt/xxx.xxx.com.crt > xxx.xxx.com_chain.crt
# bundle_ssl.sh /etc/httpd/conf/ssl.crt/dvcacert.cer >> xxx.xxx.com_chain.crt

/etc/httpd/conf.d/ssl.conf の該当箇所を以下のように書き換えます。

#SSLCertificateFile /etc/httpd/conf/ssl.crt/xxx.xxx.com.crt
SSLCertificateFile /etc/httpd/conf/ssl.crt/xxx.xxx.com_chain.crt

#SSLCertificateChainFile /etc/httpd/conf/ssl.crt/dvcacert.cer

エラーは出なくなります。

$ sudo /etc/init.d/httpd configtest
Syntax OK


 

以下は、SSLCertificateChainFile ディレクティブがなくなったこととは関係ないエラーですが、記録しておきます。

上記設定で起動したところ、まだ以下のエラーログの内容を吐き出して失敗しました。

[Wed Feb 18 14:24:10.194548 2015] [ssl:emerg] [pid 7602] AH02580: Init: Pass phrase incorrect for key xxx.xxx.com:443:0
[Wed Feb 18 14:24:10.194575 2015] [ssl:emerg] [pid 7602] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Wed Feb 18 14:24:10.194584 2015] [ssl:emerg] [pid 7602] SSL Library Error: error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error
[Wed Feb 18 14:24:10.194591 2015] [ssl:emerg] [pid 7602] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Wed Feb 18 14:24:10.194598 2015] [ssl:emerg] [pid 7602] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Type=RSA)
[Wed Feb 18 14:24:10.194633 2015] [ssl:emerg] [pid 7602] SSL Library Error: error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib
[Wed Feb 18 14:24:10.194643 2015] [ssl:emerg] [pid 7602] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Wed Feb 18 14:24:10.194650 2015] [ssl:emerg] [pid 7602] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Type=PKCS8_PRIV_KEY_INFO)
[Wed Feb 18 14:24:10.194659 2015] [ssl:emerg] [pid 7602] AH02564: Failed to configure encrypted (?) private key xxx.xxx.com:443:0, check /etc/httpd/conf/ssl.key/xxx.xxx.com.key

「SSLPassPhraseDialog exec:」で指定しているパスワードファイルの移行を忘れていました。
パスワードファイルを持ってきて、実行権限を与え、ssl.conf に以下の編集をして起動したところ、正常に起動できました。

#SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLPassPhraseDialog exec:/usr/local/bin/ssl_pp_filter.sh

ssl_pp_filter.sh の中身は下記のようにパスフレーズを echo するだけのものです。

#!/bin/sh
echo "パスフレーズ"

コメントを残す

コメントは当サイト運営者の承認後に反映されます。
お名前はニックネームでも結構です。

Comments are allowed only in Japanese. / 日本語が含まれない投稿は無視されますのでご注意ください。