無料のSSL証明書 Let’s EncryptでApacheをSSL化

2019-03-05

概要

ownCloudをサーバーに導入しましたが、暗号化したいのでSSL証明書をインストールします。SSL証明書は無料の「Let’s Encrypt」を利用します。

Let’s Encryptは、2016年4月から正式なサービスを開始され、SSL(TLS)に利用できるサーバ証明書を無償で発行している認証局またはサービスです。証明書の発行期限は90日と短いですが、無料なのと、導入にはコマンドを叩くだけで導入できます。
また、証明書の発行期限は90日と短いですが、証明書を発行するコマンドをcronに設定すれば自動でおこなえます

Let’s Encryptの詳しい説明は以下のサイトを参考にして下さい

ITmedia:無償かつ自動でSSL(TLS)証明書を発行できる「Let’s Encrypt」とは?

 

CentOS 6.x系の場合は、Pythonのバージョンが古いのでこの作業では更新できないので下記の記事の方法を利用してください

無料のSSL「Let’s Encrypt」のインストール(CentOS 6.x)

CentOS7 に Let’s Encryptインストール

この手順でのインストールは、CentOS 7となっています。
CentOS 6.xの場合は、python 2.7をまであげないとインストールできません

インストールする場所に移動して、githubからcertbotのレポジトリをcloneします。

# cd /usr/local/
# git clone https://github.com/certbot/certbot

そのあとに、Let’s Encrypt クライアントが依存するパッケージをインストールします
# cd certbot/
# ./certbot-auto 

下記のコマンドで証明書を取得します。使用する環境でディレクトリ、ドメイン名、メールアドレスは変更して下さい
# ./certbot-auto certonly --webroot -w /var/www/example -d www.example.com -m info@example.com --agree-tos

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/www.example.com/fullchain.pem. Your cert will
   expire on 2016-11-01. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot-auto again. To
   non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

・パラメータの詳細

–webroot WEBサーバのドキュメントルートに認証用ファイルが生成されます。
「.well-known/」というディレクトリが作成され、この中に生成されます
-w WEBサーバのDocumentRootを指定します
-d 証明書を取得するドメインを指定します
-m メールアドレスを指定します。更新期限が近づくとこのアドレスにメールが来ます
–agree-tos Let’s Encrypt の利用規約に同意します

証明書や秘密鍵は「/etc/letsencrypt/archive/」以下に保存されます。下記の場所にシンボリックリンクが生成されます。

  • 証明書: /etc/letsencrypt/live/<ドメイン名>/cert.pem
  • 証明書+中間CA証明書: /etc/letsencrypt/live/<ドメイン名>/fullchain.pem
  • 秘密鍵: /etc/letsencrypt/live/<ドメイン名>/privkey.pem
  • 中間CA証明書: /etc/letsencrypt/live/<ドメイン名>/chain.pem

Apacheの設定

ApacheのSSL設定は以下のように設定しました

<VirtualHost *.443>
  DocumentRoot /var/www/owncloud/html
  ServerName www.example.com
  
  SetEnvIf Request_URI "\.(gif|jpg|png|css|js)$" nolog
  ErrorLog /var/www/owncloud/log/ownc-ssl_error.log
  CustomLog /var/www/owncloud/log//ownc-ssl_access.log combined env=!nolog

  SSLEngine on
  SSLHonorCipherOrder on
  Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
  SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

  SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem

  <Directory /var/www/owncloud/html/>
    Options +FollowSymlinks
    AllowOverride All
  </Directory>

</VirtualHost>

# 設定変更後は、Apacheを再起動します
# systemctl reload httpd 

SSL証明書 自動更新を設定する (cron)

SSLの更新は以下のコマンドをcronに設定して、毎月1日の朝5時に証明書を自動更新して、Apacheをリロードします。

# crontab -e
0 5 1 * * /usr/local/certbot/certbot-auto renew --force-renew && /bin/systemctl reload httpd

スポンサーリンク