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