MENU

CentOS6.xにLet’s Encryptをインストールする

2020 3/24
目次

事前準備・前提条件

今回は客先のサーバーの環境を前提条件に進めていく。

#centosのバージョン確認
cat /etc/redhat-release
  • CentOS 6.x
  • Apache 2.2系

既存のサーバーに手を加えるに当たって気をつけておく点として、ApacheにすでにSSLが適用されている場合、再起動時にパスフレーズ入力を求められる。もしパスフレーズがわからなければApacheが起ち上がらなくなるので事前に確認する必要がある。

まずはhttpd/conf.dの中を覗いてSSLを利用している部分がないかを確認する

mod_sslが入ってなければそもそもSSLを利用していない。

# mod_sslが入っていない場合はインストールする
$ yum -y install mod_ssl

もし、パスフレーズが必要なSSLが今回変更対象のものであればあまり気にしなくて良いのですが、そのあたりの細かい状況はケースバイケースなので、いずれにしてもきちんと把握しておく必要がある。(凡ミスをやらかしたので自分への戒めで書いてます)

certbotの準備

certbotを利用するにあたってpython2.7が必要なので、準備します。準備方法はいろいろありますが、python2.6が標準で入っていたため、依存関係崩さないように2.6と2.7を共存させる。

# Software Collectionを更新
$ yum install centos-release-scl-rh
$ python --version
$ yum install python27
$ vi /etc/profile.d/python27.sh
#!/bin/bash
 
source /opt/rh/python27/enable
export X_SCLS="`scl enable python27 'echo $X_SCLS'`"
# profileを読み込む
source ~/.profile

# certbotをインストール
$ curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
curl: (35) SSL connect error

そのままcurlでインストールしようとしたらエラーが出た。どこで躓いているのかを確認してみる。

# どこでつまづいているのかエラー内容を確認
$ curl -L --verbose https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

* About to connect() to dl.eff.org port 443 (#0)
*   Trying 151.101.108.201... connected
* Connected to dl.eff.org (151.101.108.201) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -12190
* Closing connection #0
* SSL connect error

curl: (35) SSL connect error

諸々不具合が出ているようだが、まずはcurlのバージョンが古いだけの場合が多いようなのでとりあえずアップデートする。

# curlをアップデート
$ yum update curl
$ yum update nss
# certbotの依存関係を処理するのに使われるパッケージをアップデート
$ yum update libcurl

# certbotをインストール(再)
$ curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

# certbot-autoに実行権限を与える
$ chmod 700 /usr/bin/certbot-auto

# certbot-autoを動かすと依存パッケージが勝手にインストールされる
$ certbot-auto --version

これでcertbotの準備はできた。

Apache2.2の設定①

wwwディレクトリ配下の各ドメインのドキュメントルートは基本的にディレクトリ名をドメインにしているという前提で説明していきます。ディレクトリ名をドメイン名にしていない場合は適宜読み替えてください。

# 認証用ファイルを設置するディレクトリを作成する
mkdir /var/www/certbot/(任意のドメイン名など)

# Apacheのバーチャルホスト設定ファイルに追記する
vi /etc/httpd/conf.d/(任意のドメイン).conf
<VirtualHost *:80>
    DocumentRoot /var/www/(ドキュメントルートのディレクトリパス)
    ServerName (設定対象のドメイン名)
...
 
    # for Let's Encrypt
    Alias /.well-known /var/www/certbot/(任意のドメイン名)/.well-known
 
    <Directory /var/www/certbot/(任意のドメイン名)>
        Require all granted
    </Directory>
</VirtualHost>

バーチャルホストの設定ファイルは/etc/httpd/conf.dディレクトリ内に.conf拡張子で置いておくと勝手に読み込んでくれる。ドメイン毎に1つのファイルで書いてもいいけど、SSLの設定ファイルも細かく切り分けて管理すると便利。

# バーチャルホストファイル構成例
example.com.conf ←ポート80の設定用
example.com.ssl.conf ←ポート443(SSL)の設定用
example.com.ssl.conf_200320  (バックアップなどは拡張子をconfから変更することで読み込まれなくなる)

バーチャルホストの設定ができたら設定をリロードする

ssl.conf内のvirtualhostディレクティブをごそっと削除

# apachectl -t
CentOS7
# systemctl reload httpd
CentOS6
# service httpd reload

Let’s Encrypt証明書を取得

Apache2.2の設定②

SSLのバーチャルホスト設定を追加

# apachectl -t
# service restart httpd

常時SSL化

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

Let’s Encryptの更新設定

更新作業

自動更新スクリプト

この記事が気に入ったら
フォローしてね!

りょま

本職:教える人,スキル:プログラミング,趣味:音楽

コメント

コメントする

目次
閉じる