ApacheへのSSL証明書の設定

カテゴリ:SSL証明書

ApacheでSSLを使用した暗号化通信を実施するためにSSL証明書を使用する場合は、まず秘密鍵とSSL証明書を作成した上で、Apacheでそれらのファイルを指定します。
※SSL証明書の作成についてはSSL証明書の作成方法を参照してください。

mod_sslのインストール

もし、OpenSSLとApacheのSSL用のモジュールである mod_ssl をインストールしていない場合はインストールします。
# yum -y install openssl
# yum -y install mod_ssl

秘密鍵とSSL証明書を設定する

SSL証明書(CRTファイル)と秘密鍵(KEYファイル)を任意の場所に置きます。
※以下の例では、/etc/httpd/conf/ 配下に置いているものとします。

vi で /etc/httpd/conf.d/ssl.conf ファイルを開きます。

# vi /etc/httpd/conf.d/ssl.conf
以下のように既存のパラメータを削除するかコメントアウトした上で、「SSLCertificateFile」パラメータにSSL証明書(CRTファイル)、「SSLCertificateKeyFile」パラメータに秘密鍵(KEYファイル)を指定します。

例)

#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/conf/server.crt

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/conf/server.key
設定を反映させるためにApacheを再起動します。
# apachectl restart

動作確認

Webブラウザでhttpsでドメイン(CSRの「Common Name」に指定したFQDN)にアクセスし、指定した証明書が表示されるかを確認します。

https://<ドメイン名>

正しくない証明書を指定した場合の警告

ちなみに 「Common Name」とは異なるFQDN(以下の例の場合IPアドレスやlocalhost)や自己署名証明書を使用した場合、一般的なブラウザでは信頼できない証明書として警告画面が表示されます。
また、wgetコマンドでアクセスした際にも、同様に警告が表示されます。

「Common Name」とリクエストされたホスト名が異なる場合

以下のように証明書の「Common Name」とリクエストされたホスト名が異なる旨の警告が表示されます。

Webブラウザ(Google Chrome)の場合


wgetコマンドの場合

# wget https://localhost/
--2014-09-13 19:59:32--  https://localhost/
localhost をDNSに問いあわせています... ::1, 127.0.0.1
localhost|::1|:443 に接続しています... 接続しました。
エラー: localhost の証明書(発行者: `/C=JP/ST=hoge/L=Tokyo/O=hoge/OU=hoge/CN=example.com/emailAddress=hoge@example.com')の検証に失敗しました:
  自己署名証明書です。
    エラー: certificate common name `example.com' doesn't match requested host name `localhost’.
localhost に安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。

自己署名証明書の場合

また、「Common Name」に指定したドメイン(この場合example.com)でアクセスできるようにするために /etc/hosts で example.com に 127.0.0.1 を指定し、「Common Name」とリクエストしたホスト名が一致するようにした場合でも、当然ですが自己署名証明書の警告は表示されます。

Webブラウザ(Google Chrome)の場合


詳細を見ると、第三者機関(CA)で署名されていない自己署名証明書である旨が表示されているのが分かります。

wgetコマンドの場合

# wget https://example.com/
--2014-09-13 20:02:58--  https://example.com/
example.com をDNSに問いあわせています... 127.0.0.1
example.com|127.0.0.1|:443 に接続しています... 接続しました。
エラー: example.com の証明書(発行者: `/C=JP/ST=hoge/L=Tokyo/O=hoge/OU=hoge/CN=example.com/emailAddress=hoge@example.com')の検証に失敗しました:
  自己署名証明書です。
example.com に安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。
いちいちこのような警告画面がユーザーに表示されたのでは実質的に自己署名証明書は使い物になりません。
従って、本番環境では第三者機関による署名済みの証明書を取得して設定する事が前提になります。

なお、HTTPS化した場合は、忘れずにHTTP(80番ポート)は無効にするか、.htaccessファイルでHTTPSへのリダイレクトの設定をしておくのを忘れずに。
例)

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

公開日時: 2014年09月13日  20:22:45

SSL証明書に戻る

このページのトップに戻る