php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

Let's Encyptで証明書を発行して自動更新を設定する(amazon linux)

Let's Encyptで証明書を発行して自動更新を設定する(amazon linux)

公開サイトを作ろうと思い単純なHTMLでテキストを表示する1枚ページなんですが今後も考えてSSL対応をしようと思いました。
しかし、今のところ収益性がないのでお金はかけたくない。

そう言えば前に無料のSSL証明書が取得できるようなこと言っていたな
と思い出し早速検索

【SSL証明書 無料 発行】

検索TOPには出てきませんでしたがこの無料で発行できる認証局として


と言うものがヒットしました

こちらの非公式解説サイトという非公式で解説してくれているのもありました
今回私は本サイトを訳して進めまています

環境に関してですが
EC2インスタンス(amazon linux)
nginx/1.12.1
本当はnginx1.13.10をソースよりインストールしたんですが後に書きますcertbotの自動でnginxの設定を書き換えてくれるコマンドだとパッケージインストールのデフォルト設定ファイルパスにないとエラーが出てソースの設定ファイルにリンクしても良かったんですが早く試したかったのでまずはyumでインストールできるデフォルトパッケージに切り替えました。

そもそも無料のSSLって大丈夫なの??と思うでしょうが暗号化という点では自己証明でも問題ないです(のはずです)。ただ自己証明はおれが大丈夫だって言ってるだけなんで警告は出て他の人からは信用されないしどう扱われているかわかったもんではありません。ですので第三者機関が発行する証明書があるわけです。
では無料と有料の違いは?有料にはサポートやオプションがあったり、無料は(Let's Encryptは)90日更新で短いなど違いがあるようです。


では早速導入してみましょう
ドメイン認証ですので事前にお名前.comでドメインを取得、EC2インスタンスはIPを固定してあります。ドメイン管理ツールでIPとドメインを紐付けてあります。

amazon linuxに導入するため基本的にはCentOS6ベースでやって行けばいいはずなので
公式サイトからDocumentationにあるSubscriber Informationのなかの
ここにあるおすすめcertbotを利用したいと思います。

ページのACME v2 Compatible Clients欄にあるリンク(Certbot)をクリック

こちらで証明書をインストールするWEBサーバ種類とOSを選択します
そうするとインストールの仕方が表示されますのでこの通りに進めてみます

nginxはyumでインストール
# sudo yum install nginx

certbot の取得
翻訳によると使っているOSにcertbotパッケージがないのでcertbot-autoを使ってコピーを取得するようです

# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto

今回はnginxの予定なのでこちら

# sudo ./path/to/certbot-auto --nginx
実際にはcertbot-autoがあるカレントディレクトリに移動して
# ./certbot-auto --nginx
と実行したところ

Requesting to rerun /usr/local/src/certbot-auto with root privileges...
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.

そもそも管理者権限で実行しろということなんですが
他に実行したいならバックアップを持ちなさいそして--debugフラグをを付けて再度実行しろということだったので

# ./certbot-auto --nginx --debug

どうすると必要なパッケージがインストールされました。

こっから先をどう進めていいのかわからずにまた


# ./certbot-auto --nginx
--debugフラグをつけないで実行してみました。すると以下が

No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel): domain_name.com
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for domain_name.com
nginx: [error] invalid PID number "" in "/var/run/nginx.pid"
Cleaning up challenges
nginx: [error] invalid PID number "" in "/var/run/nginx.pid"
Encountered exception during recovery
nginx restart failed:

ドメインの入力を求められたので入力してenterをしたんですがエラーが出て
PIDファイルはあるし何だろと思ってたんですが時間がなかったので次の日に持ち越し
インスタンスを立ち上げてnginxを起動しない状態で
# ./certbot-auto --nginx
こちら実行したらなんだかうまくいきました。前日は起動した状態でやったからダメだあったのかこれはちょっと原因不明です。とりあえずできたので進みます。

成功するとこんなメッセージが出力され
IMPORTANT NOTES:
 - 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.

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.
ここに証明書できたよ、安全に運用したいなら定期的にバックアップとってねみたいなことが書いてあってあとは

1:HTTPSリダイレクト設定しないでこのまま設定はこれ以上しない
2:すべてのリクエストをHTTPSヘリダイレクトするようにする

みたいに選択をすることになるので私は【2】を選択しました。
これでインスタンスのセキュリティグループでポートを開けてアクセス

できました!

上記コマンドはnginxの設定を自動で書き換えるものなので証明書の取得だけでしたらサブコマンドをつけて
# sudo ./certbot-auto --nginx certonly
こちらみたいです(必要パッケージがない場合は--debugフラグつけるかもです)

サブコマンドについてはドキュメント参照してください

後は90日という更新を忘れずにするために定期実行をするんですが私はまだ設定していません。以下マニュアルより

証明書の更新
Let's Encypt証明書は90日間更新なので自動的に更新するようにcertbotを設定するようにお勧めします。
証明書更新テスト
# sudo ./path/to/certbot-auto renew --dry-run

こちらで正しく実行されていることが確認されれば
定期実行スクリプトcronまたはsystemdに設定します
# ./path/to/certbot-auto renew

cronやsystemdに設定する場合は1日に2回実行することをお勧めします
更新や失効しなければ何もしませんが2回実行することによりオンラインで滞在する機会が増えます。

cronの設定例は以下です。
※正午と深夜に実行される
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && ./path/to/certbot-auto renew

もっと詳細が必要であれば全ドキュメントはこちらです

※ネット翻訳を使ったので間違い等があったら申し訳ないです。

次回はnginxをソースからインストールして自分で設定をし、この証明書で公開できるように構築してサービス開発にとりかかっていこう!!

ーーーーー
2018/04/01 追記
nginxをソースからインストールしたものに切り替えました。
SSLはcertbotに設定してもらったものを使いnginxをMainline versionへ
その記事はこちらになります。
nginxをソースからインストールする

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする