SSL証明書とApache運用
 ~ちょっと気をつけるだけでトラブル防止~



サーバ運用超入門勉強会

            Copyright Digital-Effect Network Co., Ltd. All rights reserved.
アジェンダ


       お話する内容

       • httpはOKでも、httpsはNG

       • SSL証明書の更新で失敗

       • パスフレーズ確認
         OS起動時 CentOS5と6の違い?



2012/12/21         -1-   Copyright Digital-Effect Network Co., Ltd. All rights reserved.
httpはOKでも、httpsはNG


       httpはOKでも、httpsはNG
       •     Linuxをインストール
              ↓
       •     Apacheをインストール
              ↓
       •     Webコンテンツをアップロード
             –   サイトが見れたので、問題なしと判断。
             –   Apacheを再起動してみても問題なく再起動できる。
              ↓
       •     SSL証明書を設置
             –   SSLを使いたいので、mod_sslモジュールをインストール
              ↓
       •     Apache再起動
              ↓

      # /etc/init.d/httpd restart
2012/12/21                       -2-      Copyright Digital-Effect Network Co., Ltd. All rights reserved.
httpはOKでも、httpsはNG
      httpd を起動中: Syntax error on line 114 of /etc/httpd/conf.d/ssl.conf:
      SSLCertificateFile: file '/root/ssl/server.crt' does not exist or is empty

                                                                                              [失敗]




       「 file '/root/ssl/server.crt' does not exist or is empty 」
       証明書がない・・・?

       •     証明書(server.crt)は、確かに指定の場所に存在する。
       •     ファイル名も間違っていない。
       •     ファイルのパーミッションも間違っていない。

             →エラーメッセージの意味が分からないよ。。。
              でも、サイト停止した状態だよ。
              なんとかしないと。

2012/12/21                               -3-          Copyright Digital-Effect Network Co., Ltd. All rights reserved.
httpはOKでも、httpsはNG


       原因は?
       SELinuxが邪魔をしています。
      Nov 2 15:56:30 www1 kernel: type=1400 audit(1351839390.871:6): avc: denied { search } for
      pid=1592 comm="httpd" name="ssl" dev=vda3 ino=545136
      scontext=system_u:system_r:httpd_t:s0 tcontext=root:object_r:user_home_t:s0 tclass=dir
                                                                                    (※/var/log/messagesより抜粋)


       CentOS5以降の場合、意図的に停止しない限り、SELinuxが有効になっています。
       (Version4までは、OSインストール時にSELinuxの有効/無効を指定できます)


       今回は「httpdが、新たにインストールされたmod_sslにアクセスしようとした際、
       SELinuxのアクセス制御機能によって拒否された」ということが原因です。




2012/12/21                              -4-           Copyright Digital-Effect Network Co., Ltd. All rights reserved.
httpはOKでも、httpsはNG


       許可するには?

      allow httpd_t user_home_t:dir search;
       という許可をポリシーに追加すればいいですが、都度書くのは面倒。




       それ以前に、SELinux難しい・・・。
       こんなこと益々やってらんない!!


                                                                    既に絶版・・・
2012/12/21                  -5-   Copyright Digital-Effect Network Co., Ltd. All rights reserved.
httpはOKでも、httpsはNG

                                       これでアクセス制御はしなくなりますが、動作は
       対策                              し続けているので、若干サーバのパフォーマン
                                       スが下がります。
                                       完全に停止させておいた方がよいでしょう。
       [SELinuxのアクセス制御停止]
       サーバを停止させずにSELinuxの機能を切りたい場合

      確認方法
      # getenforce
      Enforcing        ←SELinuxのアクセス制御が有効になっています。

       変更方法
      # setenforce 0   ←「0」で「Permissive」モードに変更します。
      # getenforce     ←設定が変わったかどうか確認します。
      Permissive       ←確かに変わりました。

       Permissiveモードは、アクセス制御機能は停止していますが、SELinux自体は各種アクセ
       スを監視し、情報をログに出力しています。


2012/12/21                     -6-     Copyright Digital-Effect Network Co., Ltd. All rights reserved.
httpはOKでも、httpsはNG


       対策
       [SELinuxの完全停止]
       完全にSELinuxを停止させたい場合
       「/etc/sysconfig/selinux」という設定ファイルを変更します。

      SELINUX=enforcing
       ↓
      SELINUX=disabled


       設定を反映させる為、サーバを再起動します。

       サーバ起動後
      # getenforce
      Disabled       ←SELinuxのアクセス制御が完全に停止しています。


2012/12/21                   -7-     Copyright Digital-Effect Network Co., Ltd. All rights reserved.
証明書の更新で失敗


       証明書の更新で失敗
       •     Goolgle検索
              ↓
       •     コマンドをそのままコピペで実行(諸々の作業をopensslコマンドで実行)
              ↓
       •     証明書の設置完了!
              ↓
              ↓ 時は流れて、証明書の更新時期が。
              ↓
       •     Google検索
              ↓
       •     証明書のファイルを置き換え(中身を書き換え)
              ↓
       •     Apache再起動で更新完了!
              ↓

      # /etc/init.d/httpd restart
2012/12/21                  -8-   Copyright Digital-Effect Network Co., Ltd. All rights reserved.
証明書の更新で失敗
       httpd を停止中:                          [ OK ]
       httpd を起動中: Apache/2.2.3 mod_ssl/2.2.3 (Pass Phrase Dialog)

       Enter pass phrase: パスワード入力待ち

       パスフレーズを入力するまで、Apacheは起動できません。

       パスフレーズを思い出せなかったり、メモ書きが行方不明の場合は、、、
       Web閲覧できない障害になります!!




2012/12/21                     -9-       Copyright Digital-Effect Network Co., Ltd. All rights reserved.
証明書の更新で失敗


       対策
       [パスフレーズの削除]
       秘密鍵ファイルを直接見てみます。
      -----BEGIN RSA PRIVATE KEY-----
      Proc-Type: 4,ENCRYPTED
      DEK-Info: AES-128-CBC,8F3BC65766447343B453530E499C9F11
      +lSpfYi0jWe9zcd3kOVJ4F…
      (以下略)

       パスフレーズがかかっていると、ENCRYPTEDという文字列が入ります。
      パスフレーズの解除
      openssl rsa -in [鍵ファイル] -out [鍵ファイル]
       -inで指定した鍵ファイルを読み込み、-outで指定したファイルに書き込む形になります。
       上記で、入出力共に同じファイルを指定する場合、最初に作成した鍵ファイルが上書きされます。
       上書きを避けるには、別のファイル名を指定してください。
       ※上書きする場合は、元のファイルのバックアップは必ずとっておきましょう!

2012/12/21                      - 10 -       Copyright Digital-Effect Network Co., Ltd. All rights reserved.
証明書の更新で失敗
      やってみます。
      # openssl rsa -in server.key -out server.key

       「server.key」ファイルの中身を見てみます。

      -----BEGIN RSA PRIVATE KEY-----
      MIICXAIBAAKBgQCfvnag0XZs1gGkVe8BQP5GaaA
      (以下略)]


       「ENCRYPTED」という記述がなくなり、パスフレーズが外れました。




2012/12/21                           - 11 -          Copyright Digital-Effect Network Co., Ltd. All rights reserved.
証明書の更新で失敗

       パスフレーズが入っていると困ること
       例) 急なトラブルでOSそのものを再起動しなければいけないとき

             自宅から、データセンターにあるサーバ自体を再起動した。
              ↓
             パスフレーズの入力待ちで、サーバ起動処理自体が途中で停止。
              ↓
             気づかず、長時間のサイト停止!


   こういう場合は、リモートからサーバへログインして手動でApacheを起動させます。

   ※SSHの起動順序がApacheの起動よりも後になるように変えていた場合、Apacheのパスフ
     レーズ待ちでOSの起動処理が停止するので、リモートログインできなくなります。
     この場合、サーバに直接モニターをつなぎ、パスフレーズを入力して起動処理を進めないと
     いけなくなります。




2012/12/21            - 12 -   Copyright Digital-Effect Network Co., Ltd. All rights reserved.
CentOS5/6の違いってある?
       実際の画面 (CentOS5の場合)




   OS起動時の画面。
   Apache起動時に、SSL証明書(ssl.example.com)のパスフレーズを聞いてきています。
   ここで、パスフレーズを入力すると、OS起動処理が進みます。

2012/12/21                  - 13 -   Copyright Digital-Effect Network Co., Ltd. All rights reserved.
CentOS5/6の違いってある?
       実際の画面 (CentOS6の場合)

       デフォルトの場合、起動画面は白いプログレスバーが伸びていくアニメーションに
       なっています。




       SSLのパスフレーズがかかっていると、どうなるでしょうか?
       このように、起動が完了したように見えても、ログインプロンプトが出て来ません。




       通常は、OSの起動が完了すると、以下のようにログインプロンプトが出てきます。




       ※「Esc」キーで、以前のようなブートプロセス表示とプログレスバー表示の交互に切り替えることができます。

2012/12/21                  - 14 -   Copyright Digital-Effect Network Co., Ltd. All rights reserved.
CentOS5/6の違いってある?
       実際の画面 (CentOS6の場合)

       パスフレーズの入力を促すような表示はありませんが、この状態でもパスフレーズの
       入力待ちなので、このまま入力すると、処理が進みます。




       以前のように、起動シーケンスが見えるようにするには、「grub.conf」を編集します。
       (grub.confから「rhgb quiet」を削除するだけです。詳細は割愛。)




2012/12/21                  - 15 -   Copyright Digital-Effect Network Co., Ltd. All rights reserved.
ご清聴ありがとうございました。




広告スペース
                          設計から運用まで、
                          安全・安心ホスティング
                        単体サーバから複数台構成まで幅広く対応致します。

      証明書取得、設置~更新代行まで承ります。
2012/12/21     - 16 -      Copyright Digital-Effect Network Co., Ltd. All rights reserved.

Ssl証明書を設定したらapacheが起動しない?

  • 1.
  • 2.
    アジェンダ お話する内容 • httpはOKでも、httpsはNG • SSL証明書の更新で失敗 • パスフレーズ確認 OS起動時 CentOS5と6の違い? 2012/12/21 -1- Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 3.
    httpはOKでも、httpsはNG httpはOKでも、httpsはNG • Linuxをインストール ↓ • Apacheをインストール ↓ • Webコンテンツをアップロード – サイトが見れたので、問題なしと判断。 – Apacheを再起動してみても問題なく再起動できる。 ↓ • SSL証明書を設置 – SSLを使いたいので、mod_sslモジュールをインストール ↓ • Apache再起動 ↓ # /etc/init.d/httpd restart 2012/12/21 -2- Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 4.
    httpはOKでも、httpsはNG httpd を起動中: Syntax error on line 114 of /etc/httpd/conf.d/ssl.conf: SSLCertificateFile: file '/root/ssl/server.crt' does not exist or is empty [失敗] 「 file '/root/ssl/server.crt' does not exist or is empty 」 証明書がない・・・? • 証明書(server.crt)は、確かに指定の場所に存在する。 • ファイル名も間違っていない。 • ファイルのパーミッションも間違っていない。 →エラーメッセージの意味が分からないよ。。。 でも、サイト停止した状態だよ。 なんとかしないと。 2012/12/21 -3- Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 5.
    httpはOKでも、httpsはNG 原因は? SELinuxが邪魔をしています。 Nov 2 15:56:30 www1 kernel: type=1400 audit(1351839390.871:6): avc: denied { search } for pid=1592 comm="httpd" name="ssl" dev=vda3 ino=545136 scontext=system_u:system_r:httpd_t:s0 tcontext=root:object_r:user_home_t:s0 tclass=dir (※/var/log/messagesより抜粋) CentOS5以降の場合、意図的に停止しない限り、SELinuxが有効になっています。 (Version4までは、OSインストール時にSELinuxの有効/無効を指定できます) 今回は「httpdが、新たにインストールされたmod_sslにアクセスしようとした際、 SELinuxのアクセス制御機能によって拒否された」ということが原因です。 2012/12/21 -4- Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 6.
    httpはOKでも、httpsはNG 許可するには? allow httpd_t user_home_t:dir search; という許可をポリシーに追加すればいいですが、都度書くのは面倒。 それ以前に、SELinux難しい・・・。 こんなこと益々やってらんない!! 既に絶版・・・ 2012/12/21 -5- Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 7.
    httpはOKでも、httpsはNG これでアクセス制御はしなくなりますが、動作は 対策 し続けているので、若干サーバのパフォーマン スが下がります。 完全に停止させておいた方がよいでしょう。 [SELinuxのアクセス制御停止] サーバを停止させずにSELinuxの機能を切りたい場合 確認方法 # getenforce Enforcing ←SELinuxのアクセス制御が有効になっています。 変更方法 # setenforce 0 ←「0」で「Permissive」モードに変更します。 # getenforce ←設定が変わったかどうか確認します。 Permissive ←確かに変わりました。 Permissiveモードは、アクセス制御機能は停止していますが、SELinux自体は各種アクセ スを監視し、情報をログに出力しています。 2012/12/21 -6- Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 8.
    httpはOKでも、httpsはNG 対策 [SELinuxの完全停止] 完全にSELinuxを停止させたい場合 「/etc/sysconfig/selinux」という設定ファイルを変更します。 SELINUX=enforcing ↓ SELINUX=disabled 設定を反映させる為、サーバを再起動します。 サーバ起動後 # getenforce Disabled ←SELinuxのアクセス制御が完全に停止しています。 2012/12/21 -7- Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 9.
    証明書の更新で失敗 証明書の更新で失敗 • Goolgle検索 ↓ • コマンドをそのままコピペで実行(諸々の作業をopensslコマンドで実行) ↓ • 証明書の設置完了! ↓ ↓ 時は流れて、証明書の更新時期が。 ↓ • Google検索 ↓ • 証明書のファイルを置き換え(中身を書き換え) ↓ • Apache再起動で更新完了! ↓ # /etc/init.d/httpd restart 2012/12/21 -8- Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 10.
    証明書の更新で失敗 httpd を停止中: [ OK ] httpd を起動中: Apache/2.2.3 mod_ssl/2.2.3 (Pass Phrase Dialog) Enter pass phrase: パスワード入力待ち パスフレーズを入力するまで、Apacheは起動できません。 パスフレーズを思い出せなかったり、メモ書きが行方不明の場合は、、、 Web閲覧できない障害になります!! 2012/12/21 -9- Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 11.
    証明書の更新で失敗 対策 [パスフレーズの削除] 秘密鍵ファイルを直接見てみます。 -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,8F3BC65766447343B453530E499C9F11 +lSpfYi0jWe9zcd3kOVJ4F… (以下略) パスフレーズがかかっていると、ENCRYPTEDという文字列が入ります。 パスフレーズの解除 openssl rsa -in [鍵ファイル] -out [鍵ファイル] -inで指定した鍵ファイルを読み込み、-outで指定したファイルに書き込む形になります。 上記で、入出力共に同じファイルを指定する場合、最初に作成した鍵ファイルが上書きされます。 上書きを避けるには、別のファイル名を指定してください。 ※上書きする場合は、元のファイルのバックアップは必ずとっておきましょう! 2012/12/21 - 10 - Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 12.
    証明書の更新で失敗 やってみます。 # openssl rsa -in server.key -out server.key 「server.key」ファイルの中身を見てみます。 -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCfvnag0XZs1gGkVe8BQP5GaaA (以下略)] 「ENCRYPTED」という記述がなくなり、パスフレーズが外れました。 2012/12/21 - 11 - Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 13.
    証明書の更新で失敗 パスフレーズが入っていると困ること 例) 急なトラブルでOSそのものを再起動しなければいけないとき 自宅から、データセンターにあるサーバ自体を再起動した。 ↓ パスフレーズの入力待ちで、サーバ起動処理自体が途中で停止。 ↓ 気づかず、長時間のサイト停止! こういう場合は、リモートからサーバへログインして手動でApacheを起動させます。 ※SSHの起動順序がApacheの起動よりも後になるように変えていた場合、Apacheのパスフ レーズ待ちでOSの起動処理が停止するので、リモートログインできなくなります。 この場合、サーバに直接モニターをつなぎ、パスフレーズを入力して起動処理を進めないと いけなくなります。 2012/12/21 - 12 - Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 14.
    CentOS5/6の違いってある? 実際の画面 (CentOS5の場合) OS起動時の画面。 Apache起動時に、SSL証明書(ssl.example.com)のパスフレーズを聞いてきています。 ここで、パスフレーズを入力すると、OS起動処理が進みます。 2012/12/21 - 13 - Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 15.
    CentOS5/6の違いってある? 実際の画面 (CentOS6の場合) デフォルトの場合、起動画面は白いプログレスバーが伸びていくアニメーションに なっています。 SSLのパスフレーズがかかっていると、どうなるでしょうか? このように、起動が完了したように見えても、ログインプロンプトが出て来ません。 通常は、OSの起動が完了すると、以下のようにログインプロンプトが出てきます。 ※「Esc」キーで、以前のようなブートプロセス表示とプログレスバー表示の交互に切り替えることができます。 2012/12/21 - 14 - Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 16.
    CentOS5/6の違いってある? 実際の画面 (CentOS6の場合) パスフレーズの入力を促すような表示はありませんが、この状態でもパスフレーズの 入力待ちなので、このまま入力すると、処理が進みます。 以前のように、起動シーケンスが見えるようにするには、「grub.conf」を編集します。 (grub.confから「rhgb quiet」を削除するだけです。詳細は割愛。) 2012/12/21 - 15 - Copyright Digital-Effect Network Co., Ltd. All rights reserved.
  • 17.
    ご清聴ありがとうございました。 広告スペース 設計から運用まで、 安全・安心ホスティング 単体サーバから複数台構成まで幅広く対応致します。 証明書取得、設置~更新代行まで承ります。 2012/12/21 - 16 - Copyright Digital-Effect Network Co., Ltd. All rights reserved.