Skip to content
VDS · ウェブサイトとウェブサーバー

無料の Let's Encrypt 証明書

certbot を使って VPS で HTTPS 証明書を発行し自動更新する方法を、ポート 80 がすでに使用中の場合も含めて説明します。

更新日 2026年8月23日

ブラウザに「保護されていない通信」と表示されず、フォームや決済が正しく機能するには証明書が必要です。Let's Encrypt は 90 日間有効な証明書を無料で発行し、自動更新も行います。

準備

次の 3 点を確認してください。確認できていないと発行に失敗します。

dig +short example.ru        # should return your machine's address
ss -tulpn | grep -E ':80|:443'
  • ドメインの A レコードが、コントロールパネルの /hosting/vds/m/<id> にある「概要」タブに表示されたアドレスを指していること。
  • ポート 80 が外部から到達可能であること。Let's Encrypt はドメインの所有権確認にこのポートを使用します。
  • Web サーバーが起動していること。Nginx または Apache のいずれかです。

Caddy を使用している場合は、何もする必要はありません。Caddy が証明書を自動で発行します。

発行

apt install -y certbot python3-certbot-nginx      # Debian, Ubuntu
dnf install -y certbot python3-certbot-nginx      # AlmaLinux, CentOS Stream

certbot --nginx -d example.ru -d www.example.ru

Apache の場合も同じ手順で、python3-certbot-apache と --apache フラグを使用します。Certbot は証明書の設定ブロックと HTTP から HTTPS へのリダイレクトを設定ファイルに自動で追加します。

結果を確認します。

certbot certificates
curl -I https://example.ru

自動更新

パッケージをインストールするとシステムタイマーも設定され、更新も処理されます。タイマーが有効であることを確認し、テスト更新を実行してください。

systemctl list-timers | grep certbot
certbot renew --dry-run

ドライランは必須です。これにより、2 か月後に更新が失敗する状況を事前に検出できます。たとえば、サイトの設定ファイル名を変更して certbot が確認ファイルの配置場所を認識できなくなった場合などです。

ポート 80 が使用中の場合

ポート 80 でアプリケーションが動作していて、そこに Web サーバーを配置できない場合は、専用のモードを使用します。

certbot certonly --standalone --preferred-challenges http -d example.ru

Certbot は確認の間だけ独自の一時サーバーを起動します。そのためにはアプリケーションを停止する必要がありますが、--pre-hook と --post-hook で自動化できます。

発行後、証明書は /etc/letsencrypt/live/example.ru/ に配置されます。ファイルは fullchain.pem と privkey.pem です。

よくあるエラー

症状原因
Timeout during connectポート 80 がファイアウォールでブロックされているか、ドメインが別のマシンを指しています
too many certificates already issuedドメインの週次制限に達しています。待つか、--staging でデバッグしてください
発行後もサイトが古い証明書を返すWeb サーバーを再読み込みしていません。systemctl reload nginx を実行してください
証明書の有効期限が切れているタイマーが無効になっています。systemctl enable --now certbot.timer を確認してください

/etc/letsencrypt ディレクトリはあなたのデータの一部です。マシンの自動バックアップは存在しないため、Web サーバーの設定ファイルとあわせてバックアップに含めてください。