GattsCOM

ブログ

BLOG

  1. Home
  2. Blog

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

#domain1

  SSLEngine 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

#domain1

  SSLEngine 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
  


//ここから下domain2追加

  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.


わけがわからんw

エラーを見ると
Enter pass phrase:Apache:mod_ssl:Error: Private key not found.

とあるので、調べるが良いのが出てこない

そーいえば、CentOS6のときはサーバー再起動したら、SSLのパスフレーズ聞かれたのに
CentOS7で聞かれなかったな・・・と思い

しかもエラーが
Enter pass phrase
なので、パスフレーズがねぇよ!?って怒ってるのかな?と思いましたのでシェルファイル作る

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の設定が出来ました!めでたしめでたし。