無料のSSLをcertbotを使って取得し、webをhttpsにする
certbotを使ってwebページをhttps化します。
certbotとは、SSL証明書の自動化ツールであり、無料のSSL証明書を取得することができます。この記事では、certbotを使用してnginxサーバーでSSL証明書を設定する方法を説明します。
certbotをインストールするには次のコマンドを実行します。
dnf install certbot
インストールできない場合アップデート等をしてみてください。
dnf update
dnf install epel-release
インストールが完了したら、動作確認をします。
certbot --version
Webrootを使用すると、Let's Encryptがドメイン所有者であることを確認するために、ディレクトリの特定のフォルダに一時ファイルを確認します。
そのため、正しいディレクトリの設定や80ポートの解放がされていないと証明書を取得できません。
1.certobtの起動
certbot certonly
2.既に起動しているウェブサーバーを使って認証をする
2のwebrootを指定する。
初めてcertbotを使用する際はこの後に以下3つを聞いてきます。
3.ドメインを入力 今回設定するドメインを入力します。
4.ドメインのディレクトリ
このドメインのルートディレクトリを指定します。
この場合「/var/www/customdomain-directory」になります。この中にindex.htmlなどが入っています。
成功すると「fullchain.pem」と「privkey.pem」のフルパスが表示されます。
5.nginxを修正
先ほどのフルパスをssl_certificate,ssl_certificate_keyに追加します。
server {
server_name customdomain.com;
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/customdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/customdomain.com/privkey.pem;
server_name customdomain.com;
access_log /var/log/nginx/customdomain.com.access.log;
location / {
root /var/www/customdomain.com;
index index.html ;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
6.nginxの再起動
証明書を読み込ませるためにnginxを再起動させます。
systemctl restart nginx
これでssl化が無事できたと思います。
ちなみに以下のように一度に記入することもできます。
certbot certonly --webroot -w /var/www/customdomain.com -d customdomain.com
certbotで証明書を更新する場合は次のコマンドを実行しますが、
その前にテスト実行用の--dry-run
を付けて実行してみます。
certbot renew --dry-run
更新しようとすると
私の場合404エラーが複数起きてしまって!!?
ちょっと何言ってるのか分からないのだけど...
404...ファイルが無いの?
Processing /etc/letsencrypt/renewal/domeins.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for domeins.com
Certbot failed to authenticate some domains (authenticator: webroot). The Certif
Domain: domeins.com
Type: unauthorized
Detail: 22.222.222.222: Invalid response from https://yumeno.me/.well
Hint: The Certificate Authority failed to download the temporary challenge filesom the internet.
Failed to renew certificate yumeno.me with error: Some challenges have......
まぁこんな感じのエラーが起きてしまいました。
調べて行くとポート?DNSレコード??リバースプロキシ使ってるから??
色々と原因があるようですが...
一時ファイルの生成場所が違いました。
更新する際certbot読み込みをする設定ファイルがありそこの修正を行います。
# Options used in the renewal process
[renewalparams]
account = 1c8fa634d79e5f0b1a49a15f90200764
authenticator = webroot
webroot_path = /var/www/yumeno.me, #<--こいつ
server = https://acme-v02.api.letsencrypt.org/directory
key_type = rsa
[[webroot_map]]
yumeno.me = /var/www/yumeno.me #<--こいつ
webroot_pathとwebroot_mapの二つのパスが違いましたので、ここの2つのパスを直すことによって無事に404エラーが解決されました。
certbotがどのよう証明書を取得するのか?
そのため、80ポートのウェブサーバーが起動していないと、Letsecnryptアクセス、認証ができないので証明書の発行できません。
SSL証明書を作るのためにはドメインとウェブサーバが必ず必要になります。ウェブサーバを起動するミドルウェアはApacheとnginx。 別の方法としてcertbot自体が80ポートを使って認証時のみウェブサーバとして起動する方法があります。
certbot自体がウェブサーバになる機能
certbot standalone
というコマンドがあります。
が、これを使うことはないでしょう。
これを使う場合certbotが80ポートを要求しますが、通常運用時はnginxやApacheが既に80ポートを使っているので起動ができません。
そのため、このstandaloneを使う場合一度nginx,Apacheを終了させる必要があります。
既に起動しているウェブサーバを使って認証します。
認証はcertbotが 「指定した場所/.well-known/acme-challenge/」のフォルダに一時的にファイルを作りLetsecnryptが80ポートを通してそのファイルを確認して、認証します。
そのため、80ポートが空いてない場合や、一時ファイルが確認できない場合は証明書の発行がされません。
一時ファイルの生成場所、アクセス許可に注意してください。
certbotのプラグインがあります。プラグインを利用するとapache,nginxの設定ファイルに自動的追加してくれます。
nginxの場合は以下をインストールします。
python3-certbot-nginx
そしてcertonlyのコマンド外し、--nginxを付けて実行します。
sudo certbot --nginx -d customdomain.com -d customdomain.com
コマンド実行の参考になりました。 qiita
Certbotは、Letsecnryptの自動化ツールであり、80ポートのウェブサーバーが起動していないと証明書を発行できません。既存のApacheまたはnginxウェブサーバを使用して認証を行ってください。Certbotは高機能過ぎるので起動コマンドが結構あります。
certonlyを付けないと証明書取得と、インストール「configファイルに書き込む」まで実行する仕様となっているので、その時プラグインがありませんと怒られてしまう点は注意ください。
nginxの設定ファイルあまり自信ない...
質問や、間違いがありましたら、お気軽にどうぞ
※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください