CentOS7さくらのVPSに複数SSL設定をしたら、Apacheが再起動出来なくてハマッた
さくらのVPSにCentOS7を入れて、その他ちょこちょこ入れて(まぁここはどうでもいい)
お客さんのサイトをhttps(SSL)化しており、同じサーバーでもう一つお客さんのサイトをhttps(SSL)しないと行けなくて
設定したところ、Apacheの再起動が出来ず数時間ハマッた話し。
結論は解決したので、その経緯を!!
環境
・さくらVPS
・CentOS Linux release 7.2.1511 (Core)
・Server version: Apache/2.4.6 (CentOS)
・PHP Ver.7.1.26
まずは、設定ファイル。 cd /etc/httpd/conf.d/ vim vhost.conf SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 #SSLMutex default SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin #domain1SSLEngine on SSLProtocol all -SSLv2 SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server_domain1.key SSLCertificateChainFile /etc/httpd/conf/ssl.crt/internal_domain1.crt SSLCertificateFile /etc/httpd/conf/ssl.crt/server_domain1.crt DocumentRoot /var/www/html/domain1 ServerName domain1:443 AddDefaultCharset UTF-8 AllowOverride All Options Indexes FollowSymLinks
以前のdomain1はこの設定で動いていたので
domain2を追加してみた
SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 #SSLMutex default SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin #domain1SSLEngine on SSLProtocol all -SSLv2 SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server_domain1.key SSLCertificateChainFile /etc/httpd/conf/ssl.crt/internal_domain1.crt SSLCertificateFile /etc/httpd/conf/ssl.crt/server_domain1.crt DocumentRoot /var/www/html/domain1 ServerName domain1:443 AddDefaultCharset UTF-8 //ここから下domain2追加AllowOverride All Options Indexes FollowSymLinks SSLEngine on SSLProtocol all -SSLv2 SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server_domain2.key SSLCertificateChainFile /etc/httpd/conf/ssl.crt/internal_domain2.crt SSLCertificateFile /etc/httpd/conf/ssl.crt/server_domain2.crt DocumentRoot /var/www/html/domain2 ServerName domain2:443 AddDefaultCharset UTF-8 AllowOverride All Options Indexes FollowSymLinks
この状態で、Apacheを再起動する。
systemctl restart httpd (Apache再起動)
すると。こんなエラーが出る。
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
あらら?とエラーの中にsystemctl status httpd.serviceと書かれているのでやってみる
systemctl status http
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 水 2019-05-22 17:05:30 JST; 21s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 12625 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
Process: 7140 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
Process: 12623 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 12623 (code=exited, status=1/FAILURE)
5月 22 17:05:30 ******.vs.sakura.ne.jp httpd[12623]: In order to read them you have to provide the pass phrases.
5月 22 17:05:30 ******.vs.sakura.ne.jp httpd[12623]: Server ******.vs.sakura.ne.jp:443 (RSA)
5月 22 17:05:30 ******.vs.sakura.ne.jp httpd[12623]: Enter pass phrase:Apache:mod_ssl:Error: Private key not found.
5月 22 17:05:30 ******.vs.sakura.ne.jp httpd[12623]: **Stopped
5月 22 17:05:30 ******.vs.sakura.ne.jp systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
5月 22 17:05:30 ******.vs.sakura.ne.jp kill[12625]: kill: cannot find process ""
5月 22 17:05:30 ******.vs.sakura.ne.jp systemd[1]: httpd.service: control process exited, code=exited status=1
5月 22 17:05:30 ******.vs.sakura.ne.jp systemd[1]: Failed to start The Apache HTTP Server.
5月 22 17:05:30 ******.vs.sakura.ne.jp systemd[1]: Unit httpd.service entered failed state.
5月 22 17:05:30 ******.vs.sakura.ne.jp systemd[1]: httpd.service failed.
cd /etc/ssl/certs/ touch pass_ssl.sh vim pass_ssl.sh //中身 #!/bin/sh case $1 in domain1:443) 'パスフレーズが無いので空欄かここ自体要らない';; domain2:443) echo 'passpasspass';; esac exit 0
という風に設置して、vhost.confの中身も書き換える
vhost.confの中身の1行目
SSLPassPhraseDialog builtin
⬇⬇⬇⬇⬇⬇⬇
SSLPassPhraseDialog exec:/etc/ssl/certs/pass_ssl.sh
Apache再起動。
エラー。
内容は変わったけど、エラーのまま特に解決していない。
おかしいなぁと思って、Google先生に色々聞いたり何やりと時間は過ぎていく・・・・
友達に聞いてみた所
そーいえば、SSL設定したサイトでパスフレーズ設定してたら、同じような事になったことがったなぁ〜
その時はパスフレーズ解除したら、すんなり行けたよ〜って
神のお告げが降りてくる。
試しにやってみる。
//コピー・バックアップ取っておく cp server_domain2.key server_domain2.key.bkup //パスフレーズを解除する openssl rsa -in server_domain2.key -out server_domain2.key
さて、Apache再起動してみよう。
systemctl restart httpd
エラーなし。
お!行けた行けた!!
.keyファイルのパスフレーズを解除したら、すんなり行けました〜!
原因はまた今度調べときます〜
これで、無事1サーバーに複数SSLの設定が出来ました!めでたしめでたし。