WordPressなどのサイトを無料で常時SSL化(https)する方法

無料SSLでサイト構築

現在、Let’s Encryptという認証局を使えば無料で常時SSL化したサイトが簡単に構築できます。今回はLet’s Encryptを使ってSSL化する方法を解説していきます。環境は「CentOS6 Apache+openssl」で行います。

Let’s Encryptとは

Let’s Encryptとは誰もが無料で利用できる自動化されたオープンな認証局です。認証局はアメリカ合衆国のカルフォルニア州の公益法人が運営しています。

Let’s Encryptの目的はインターネットを安全に通信を行うためのさまざまな障壁(経済面・技術面・教育面)を減らすことです。このような目的があるため、常時SSL化したサイトが簡単に構築できます。

自動証明書発行の仕組み

基本的に認証の流れは前回説明した記事の流れと同じですが、「Let’s Encrypt」ではその流れをすべて自動で行います。「certbot-auto」というツールでサーバはドメイン情報を送信し、認証局はドメインの存在や正常性を確認します。

その後、サーバはCSR送信し、認証局は証明書を発行します。サイト運営者は発行された証明書をサーバにインストールします。証明書のインストール以外は「certbot-auto」ツールがすべて自動で行います。

有料版SSLと無料SSLの違い

有料版SSLと無料SSLの違いは認証局の信用度の違いにあります。料金が高いものであれば認証局の審査が厳しく、その分サイトの信頼性が上がります。

クレジットカード情報などの重要な個人情報を取り扱う場合は、このような有料版を使うことでユーザーに安心感を与えることができます。しかし、SEOのためにSSL化する場合は機能にほぼ変わりがないため無料SSLで十分です。

セットアップ

では実際にセットアップしていきます。準備として「certbot-auto」のツールをダウンロードします。

curlコマンドを使ってツールをダウンロードします。

curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

chmodコマンドでツールの実行権限を与えます。

chmod a+x /usr/bin/certbot-auto

「certbot-auto」のツールを使って依存しているパッケージをインストールします。

certbot-auto --os-packages-only --non-interactive

「certbot-auto」のツールを使って証明書を取得します。認証するサイトのドメイン名とドキュメントルートのパス、メールアドレスを入力します。メールアドレスは更新期限が近づいたときに通知されるメールアドレスを指定します。

#certbot-auto certonly --non-interactive --agree-tos --webroot -w ドキュメントルートのパス -d ドメイン名 --email メールアドレス
#例 ドメインhogehoge.comの場合
certbot-auto certonly --non-interactive --agree-tos --webroot -w /var/www/vhosts/hogehoge.com/httpdocs -d www.hogehoge.com --email hogehoge@hogehoge.com

発行された証明書をインストールする前に、サーバの環境を整えます。
まずopensslがインストールされているか確認します。

rpm -qa | grep openssl-devel

インストールされていない場合はインストールします。

yum install openssl-devel

Apacheと連携するためにモジュールをインストールします。

yum install mod_ssl

これでサーバの環境が整いましたので、発行された証明書をインストールします。
Apacheの設定を追加します。
例:hogehoge.comの場合
コンフィグファイルを作成します。

vi /etc/https/conf.d/ssl.hogehoge.com.config

コンフィグファイルにサイト設定と証明書をインストールします。

<VirtualHost *:443>
  #サイト設定
    ServerName www.hogehoge.com
    ServerAlias hogehoge.com
    DocumentRoot /var/www/vhosts/hogehoge.com/httpdocs
    ErrorLog /var/www/vhosts/hogehoge.com/logs/error_access_logs
    CustomLog /var/www/vhosts/hogehoge.com/logs/main-access_logs combined env=!no_log
    <Directory /var/www/vhosts/hogehoge.com/httpdocs>
        AllowOverride All
    </Directory>

    #SSL証明書のインストール
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/hogehoge.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/hogehoge.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/hogehoge.com/chain.pem

</VirtualHost>

SSLのコンフィグファイルにバーチャルドメインの設定を追加します。

vi /etc/httpd/conf.d/ssl.conf

下記コードを追加します。

##
## SSL Virtual Host Context
##
NameVirtualhost *:443

サーバに設定を反映させます。

service httpd resatart

「https://ドメイン名」にアクセスし、エラーが出ていないか確認します。

FireFoxでエラーが出る場合

中間証明書をダウンロードします。

wget https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem

ダウンロードしたファイルを証明書ディレクトリに移動します。

mv lets-encrypt-x1-cross-signed.pem /etc/letsencrypt/live/hogehoge.com/

コンフィグファイルに追加します。

vi /etc/https/conf.d/ssl.hogehoge.com.config

コンフィグファイルに下記を追加します。

SSLCertificateChainFile /etc/letsencrypt/live/hogehoge.com/lets-encrypt-x1-cross-signed.pem

httpsにリダイレクト

ドキュメントルートに「.htaccess」を作成し下記コードを追加します。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

自動更新

証明書が期限切れにならないように自動更新コードをCron(スケジューラー)に追加します。

cronファイルを開きます。

crontab -e

下記のコードを追加します。例では午前3時に更新するように設定しています。

MAILTO=""
0 3 * * * root certbot-auto renew --post-hook "/usr/sbin/apachectl graceful" > /dev/null 2>&1

これで完了です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする