メニューを閉じる

テクノデジタルグループ

メニューを開く

2017.09.06

インフラ

【AmazonLinux+Nginx】Let’s Encrypt設置

JTです。

AmazonLinux+NginxのWebサイトにLet’s EncryptでSSL証明書設置したので、メモを残します。

何かの参考になれば幸いです。

ドメイン認証用ドキュメントルート用意

Let’s Encryptで証明書発行(ドメイン使用権認証)用のファイルを設置するドキュメントルートが必要です。
ここでは、既存のvhostについて、Let’s encrypt が webroot 更新で使う部分だけを別のディレクトリに設定しています。

mkdir /srv/www/letsencrypt_webroot
chown nginx:nginx /srv/www/letsencrypt_webroot

 

※nginx conf(例)
vi /etc/nginx/conf.d/hogehoge.com.conf
以下を追記する

location /.well-known/ {
root /srv/www/letsencrypt_webroot;
}

nginx書式テスト&反映

nginx -t
service nginx reload

 

Let’s Encrypt インストール

1. AWSのセキュリティグループを設定
→サーバに適用されているセキュリティグループのインバウンドのHTTP(80)、HTTPS(443)を許可(0.0.0.0/0)にしておきます。

2. certbotのダウンロード&配置&権限設定

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

 

3. 証明書の発行
cerbot-autoのコマンドで証明書が自動生成されます。
※今回はhogehoge.comとwww.hogehoge.comの、www有無それぞれで発行します。

certbot-auto certonly \                  # 証明書の作成
    --webroot \                          # 既存のウェブサーバを使うモードを選択
    -w /srv/www/letsencrypt_webroot \    # ドキュメント・ルートのパス
    -d hogehoge.com \                    # 認証するドメイン名1
    -d www.hogehoge.com \                # 認証するドメイン名2
    --email <メール>@<アドレス>\           # メールアドレス登録(証明書期限切れの通知用)
    --debug                              # AmazonLinuxではこれが必要

→ ここで不足している必須モジュールがインストールされます。

※ –debugについて:
これをつけないと、AmazonLinuxでは以下のメッセージが出て進められないため、追加します。

FATAL: Amazon Linux support is very experimental at present...
if you would like to work on improving it, please ensure you have backups
and then run this script again with the --debug flag!
Alternatively, you can install OS dependencies yourself and run this script
again with --no-bootstrap.

※そのほかcertbot-autoのオプションについては下端にメモしておきました。

■以下のエラーが出た場合の対応メモ

/usr/bin/certbot-auto: line 700: virtualenv: command not found

→ virtualenvは「/usr/bin/virtualenv-2.7」以下に存在したので、update-alternativesでリンクを張る

# update-alternatives設定
update-alternatives --install /usr/bin/pip pip /usr/bin/pip-2.7 27
update-alternatives --install /usr/bin/virtualenv virtualenv /usr/bin/virtualenv-2.7 27

# 確認
update-alternatives --display pip
update-alternatives --display virtualenv

以下対話式で進める

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-staging.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

-------------------------------------------------------------------------------
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 EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y

(省略)

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/hogehoge.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/hogehoge.com/privkey.pem
Your cert will expire on 2017-12-04. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *allof your certificates, run
"certbot-auto renew"
(省略)

 

4. 生成された証明書の確認
以下のディレクトリに証明書が生成されます。

/etc/letsencrypt/live/hogehoge.com/

 

5.nginx側に証明書を設定

server {
listen 443 ssl;
ssl on;
(省略)
ssl_certificate /etc/letsencrypt/live/hogehoge.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hogehoge.com/privkey.pem;
(省略)

nginx書式テスト&反映

nginx -t
service nginx reload


6.確認
https://hogehoge.com/
https://www.hogehoge.com/
→SSL通信できていることを確認

有効期限も確認

openssl s_client -connect "hogehoge":443 < /dev/null 2> /dev/null | openssl x509 -text | grep "Not"

 

7.証明書の自動更新
# certbot-auto renew コマンドで更新します

# crontabに設置する例
crontab -e

50 3 * * 0 /usr/bin/certbot-auto renew --post-hook "/etc/init.d/nginx reload" > /path_to_log/certbot-auto.log 2>&1

 


■certbot-auto オプション説明

参照:https://letsencrypt.jp/command/

certonly
→SSL/TLS サーバ証明書の取得のみを行います。

–webroot
→ウェブサーバの DocumentRoot ディレクトリ以下に認証用のファイルを設置することでドメイン使用権者の認証を行って、SSL/TLS サーバ証明書を取得します。
→Certbot クライアントを実行するコンピュータでウェブサーバ(httpd)が動作中であり、ウェブサーバを停止することなく SSL/TLS 証明書を発行したい場合には、Webroot プラグインを利用する必要があるとのこと(https://letsencrypt.jp/docs/using.html*webroot)

–webroot-path WEBROOT_PATH もしくは -w WEBROOT_PATH
→”public_html” や “webroot” のパスを指定します。

-d DOMAIN もしくは –domains DOMAIN もしくは –domain DOMAIN
→SSL/TLS サーバ証明書の取得を申請するドメイン名を指定します。

–post-hook POST_HOOK
証明書を取得・更新する試みが終わった後にシェルで実行するコマンドを指定します。
これは、証明書を取得・更新する試みが行われた場合のみ実行されます。

【参考】

http://qiita.com/HeRo/items/f9eb8d8a08d4d5b63ee9
http://qiita.com/MashMorgan/items/56498f276c54406b1928
http://tnamao.hatenablog.com/entry/2016/03/15/014004
https://blog.doizaki.com/entry/2016/02/07/152141
http://knowledge.sakura.ad.jp/knowledge/5573/


【記事への感想募集中!】

記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!
  • こんな記事が読んでみたい、こんなことが知りたい、調べてほしい!という意見も募集中!
  • いただいた感想は今後の記事に活かしたいと思います!

感想フォームはこちら


【テクノデジタルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事