Let's encryptを使って、SSL証明書を取得する - CentOS 7

HTTPS対応するために、無料でSSL証明書を取得できるLet's enryptを利用するためのcertbotをインストールしましょう。

sudo yum -y install epel-release
sudo yum -y install certbot python-certbot-apache

Let's encryptは証明書の取得にWebサーバーが必要

Let's encryptは、HTTP接続できるWebサーバーにアクセスできることを確認することによって、SSL証明書を発行します。

ですので、HTTPで待ち受けるWebサーバーが必要です。

WebサーバーとしてAapcheのインストールを行いましょう。

HTTPS接続のためには、mod_sslが必要ですので、mod_sslのインストールを行いましょう。

よくあるサーバーの構成として、リバースプロキシで待ち受ける場合を考えてみましょう。

「/etc/httpd/conf.d/vhost.conf」の中に以下のような設定をします。HTTPのデフォルトポート80で「www.mydomain.example」を受けて、後ろにあるアプリケーションサーバーの10000番ポートで受けます。

  <VirtualHost *:80>
    ServerName www.mydomain.example
    
    <Proxy *>
      Require all granted
    </Proxy>

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / http://localhost:10000/ keepalive=On
    ProxyPassReverse / http://localhost:10000/
    RequestHeader set X-Forwarded-Proto "https"
  </VirtualHost>

SSL証明書の読み込みの設定は、存在しないので、この時点では行いません。

設定後Apacheを再起動して「http://www.mydomain.example」で、接続できることを確認してください。再起動の前には、Apacheの設定ファイルが正しいことをチェックしておくと安心でしょう。

リバースプロキシで、Webアプリケーションに接続しているの、Mojoliciousでサーバーを起動する簡単な例です。

# myapp.pl
use Mojolicious::Lite;

app->start;

起動

hypnotoad myapp.pl

Mojoliciousのhypnotoadサーバーのデフォルトのポートは10000ですが、ポート番号を指定したい場合は「hypnotoad.conf」を編集します。

SSL証明書を取得する

certbotを使って、SSL証明書を取得しましょう。Apache用のHTTPS接続のための設定も自動で追加してくれます。

sudo certbot run --apache -d www.mydomain.example

最初にメールアドレスを聞かれます。メールアドレスを入力して、Enter。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

次に同意をするか聞かれるので「A」を押してEnter。

Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:

メールアドレスをElectronic Frontier Foundationと共有したいか聞かれるので「Y」か「N」を押してEnter。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

HTTPをHTTPSにリダイレクトするか聞かれるので、「1」のリダイレクトを選びましょう。

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

最後に重要なお知らせが表示されて、終了します。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/quote-app.dev-winckler-yokohama.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/quote-app.dev-winckler-yokohama.com/privkey.pem
   Your cert will expire on 2020-04-16. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

SSL証明書は以下のディレクトリの中に格納されます。

/etc/letsencrypt/live

見てみると、ドメインごとのディレクトリに分かれて格納されています。

sudo ls /etc/letsencrypt/live