Apache2.4 + mod_ssl + SSL証明書 = ちょいつまづく?

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
一度くらいは深海に行ってみたいね

おまとめ三行

mod_sslがやむれない
おや、SSLの中間証明書が……?
そんな人に、私はなりたい

サーバーにインストールされているapacheのバージョンが2.4の場合、それより以前のバージョン(2.2とか)の頃と同じ要領でmod_sslをインストールしようとすると、上手くいかないことがある。

ついでに、SSLの証明書をインストールするところでも微妙にやり方が違う場合があったりして、ちょい焦ることがある。ってか僕は焦った。



mod_sslがやむれない

mod_ssl自体はやむれる(yumコマンドが使えるの意)のでインストール自体は簡単です。

# yum install mod_ssl

ただし、apacheのバージョンが2.4のときにやむろうとしたら、もしかしたらこんなエラーが出てインストールできないかもしれない。


Error: httpd24 conflicts with…(略)
Error: httpd24-tools conflicts with…(略)


何かhttp24がコンフリクトして上手くインストールできませんよ的なことらしい。コンフリクトってのは……何だろうね。ドラクエで即死系の呪文を連発する人のことかな。

まあ、ようはapacheの2.2と2.4の何らかのツールがぶつかっててエラーになってるとか、そんな感じのことだと思います。

もしこんなエラーが出てしまったら、mod_sslじゃなくてmod24_sslをやむれば良い。mod24_sslってのはたぶん、apache2.4用のmod_sslなんだと思います。

# yum install mod24_ssl



おや、SSLの中間証明書が……?

mod_sslをインストールすると、「/etc/httpd/cond.d/」の下とかにssl.confっていうファイルができているはずです。その中にSSL証明書や中間証明書をどこに置いたら良いか、パスが書かれています。

//SSL証明書
SSLCertificateFile /etc/pki/tls/certs/ssl.crt

//中間証明書
SSLCertificateChainFile /etc/pki/tls/certs/chain.crt

例えばこんな感じ。こういうパスかどうかは人によって違うと思うので、実際にssl.confの中を見て確認してください。

グローバルサインとかRapidSSLとかでSSL証明書と中間証明書を発行してもらったら、このパスの通りに証明書を設置すれば普通は問題ないんですけど、apache2.4の場合、この通りに証明書を置いてapacheを起動すると、こんなようなエラーが出て上手く起動できない場合がある。

The SSLCertificateChainFile directive is deprecated, SSLCertificateFile should be used instead

どうやらapache2.4では「SSLCertificateChainFile」ってのは使わなくなったみたいなんですね。なのでSSL証明書と中間証明書の両方の内容を一つのファイルに、「SSLCertificateFile」で設定されいてるパス(ここでは「/etc/pki/tls/certs/ssl.crt」)に記述する必要があるみたいです。

まあ、特に難しい手順は必要ないです。SSL証明書の内容と中間証明書の内容をそのまま続けて記述すればOK。

-----BEGIN CERTIFICATE-----
   〜中略〜
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
   〜中略〜
-----END CERTIFICATE-----

ただ続けて書くんじゃなくて、何かのスクリプトを使って二つの証明書の文字列を結合させるみたいなことをやっている人もいたんですけど、僕がやった限りではそんなことをしなくても動いたので、これでオーケーってことにします。

あとは普通にapacheを起動すればSSLが有効になります。



SSLPassPhraseDialogについて

これは僕が分かってなかっただけなんですが、ssl.confの中に「SSLPassPhraseDialog」というのがあるんです。

SSLPassPhraseDialogというのは、秘密鍵を開くパスフレーズの入力方法を設定するような項目で、「exec」と「builtin」の二種類が設定できます。

builtinの場合、apacheを起動するとパスフレーズの入力を求められます。execにすると、パスフレーズ入力用のファイルみたいなのを読み込んで起動してくれるので、起動時に自分でパスフレーズを入れる必要はなくなります。僕は今まで、SSLを使う場合はapacheを起動するたびにパスフレーズを入れなきゃいけないものなんだって勝手に思ってましたが、必ずしもそうではないんですね。

両者の書き方はこんな感じ。

//builtinの場合
SSLPassPhraseDialog builtin

//execの場合
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog

execの方のパスはたぶん任意で大丈夫だと思います。

今回mod24_sslをインストールした際、SSLPassPhraseDialogの設定が「exec」の方になってたんですが、パスフレーズ入力用のファイルみたいなものは特に用意してなかったので、ずっとapache起動でエラーになってたんですよ。何でかな〜って思ってたんですが、この事実を知ってとりあえずbuiltinに直したら起動時にパスフレーズを求められるようになったので、(僕にとっては)いつも通りになったぞと。

もしかしたら、この設定のことを知らなくて、僕と同じように全部ちゃんと設定したのにapacheが起動できないぞーっていう状況に陥る人がいるかもしれないので、一応書いときます。

時間がなくてちょっと試してないんですが、execの場合、ファイルの中身はこんな風に書くっぽいです。

//viモードでファイルを開く
# vi /usr/libexec/httpd-ssl-pass-dialog

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






なんつーか、サーバーのことって知れば知るほど分からなくなっていくような感覚になります。

たとえが分かり辛いと思いますが、1を知ったときに全部で10だと思ってたものが、8くらいまで知ってみると実は全部で100だった、みたいな。そのせいで、分からなかったことが9だったはずなのに92に増えちゃった、もうわけ分からん、新しいことを覚えるのがマジでめんどい! みたいな感じです。

サーバーのこととかDBのことは気にせずPHPのコードだけ書いてりゃ良い、そんな人に、私はなりたい。

それかもう、いっそのこと貝になりたい……いや、やっぱりなりたくないな。

貝と言えば、ホタテの貝の先っちょにある黒い点々、あれ、全部目なんだってね。つまりホタテの目は数十個あるってことになるね。ちょっと怖い……。

apacheのhttps通信時のssl.confの所在 | hacknote 2016年09月06日 17:49:05
[…] で、その場合はそれにあったバージョンのmod_sslが必要になるようです。 (参考) http://norm-nois.com/blog/archives/3105 例えば上にあるようにapacheが2.4のバージョンだとmod24_sslなるバージョンをイン […]
もしかしたら何か関連しているかも?