サーバー(AWS)に独自ドメインを追加、
そのドメインをSSL化しようとしてました。
そういう時は Let's encrypto を使います。
- certbotをインストールして実行
- SSL化したいドメインを入力
- あとは手順に沿えばSSL化完了
…なんだけど、エラーが出てしまいました。
1 |
Problem binding to port 80: Could not bind to IPv4 or IPv6. |
このCertbotエラーの原因/解決策を残しときます。。
このページの目次
AWSにLet's encrypt導入してみたが失敗…
僕は使用してる環境はAWSです。
そこにRoute53から独自ドメイン購入し、
独自ドメインをEC2に適用するまではOKでした。
ところがLet's encryptoでSSL化しようとした時です。
▼ Certbotの実行時にこんなエラーが出た
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo certbot certonly --standalone Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): hogehoge.com Requesting a certificate for hogehoge.com Performing the following challenges: http-01 challenge for hogehoge.com Cleaning up challenges Problem binding to port 80: Could not bind to IPv4 or IPv6. |
Problem binding to port 80 ...?
80番ポートに接続できないみたいです。
原因は80番ポートを別プロセスが使ってたから
とりあえず何が起きてるか調べました。
▼ lsofで80番を使用してるプロセス調査
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo lsof -i :80 httpd 3888 root 4u IPv6 24717 0t0 TCP *:http (LISTEN) httpd 3955 apache 4u IPv6 24717 0t0 TCP *:http (LISTEN) httpd 3956 apache 4u IPv6 24717 0t0 TCP *:http (LISTEN) httpd 3957 apache 4u IPv6 24717 0t0 TCP *:http (LISTEN) httpd 3958 apache 4u IPv6 24717 0t0 TCP *:http (LISTEN) httpd 3959 apache 4u IPv6 24717 0t0 TCP *:http (LISTEN) httpd 4023 apache 4u IPv6 24717 0t0 TCP *:http (LISTEN) httpd 4045 apache 4u IPv6 24717 0t0 TCP *:http (LISTEN) httpd 4053 apache 4u IPv6 24717 0t0 TCP *:http (LISTEN) |
これらが80番ポートを使用してたみたいです。
それゆえcertbotが80番ポートに接続できません。
あとちなみにlsofコマンドについて
▼ lsofはこういう用途に使える
「lsof」コマンドは、「プロトコル」「ホスト名」「IPアドレス」「サービス名」「ポート」などを指定して、プロセスが開いている「ファイル」「ディレクトリ」「ブロックファイル」「キャラクタファイル」「ライブラリ」などを表示する。「ストリーム」「ソケット」の情報も表示可能。
引用元 : https://renoji.com/IT.php?Contents=ShellScript_Bash/Cmd_lsof.html
ポート番号以外にも使えるコマンドです。
特定リソースを開いてるプロセスを特定可能
80番ポートを占有してるプロセスをkill
ということで対象プロセスをkillしました。
▼ こういうコマンド
1 |
$ sudo kill -9 $(sudo lsof -t -i:80) |
プロセスキルにはkillコマンドを使いますが、-9 をオプションとして付与すると強制終了させれるみたいです。(どうして9なのかは不明)
あと強制終了するプロセスIDを渡すわけですが、 $(sudo lsof -t -i:80) から80番ポートを使用してるプロセスIDをまとめて渡してます。
これでプロセスキルが完了しました。
▼ 無事Certbotが実行できた!SSL化も完了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ sudo certbot certonly --standalone Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): hogehoge.com Requesting a certificate for hogehoge.com Performing the following challenges: http-01 challenge for hogehoge.com Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: ... |
問題なくSSL証明書が取得できました。
もし"problem binding to port 80"が解決しないなら…
もし上記を試しても問題が解決しない場合。
次の可能性とかも考えられますね。
- 80番ポートが解放されていない
- プロセスキルが上手くいってない
以上、"problem binding to port 80" の解決策でした。
同じ問題に遭遇してるなら試してみてください。