この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「自動更新のcronが止まっていて、証明書の期限が迫っている」
Let's Encryptの証明書は90日で期限が切れます。更新スクリプトがエラーで止まっていると、気づいたときにはサイトが証明書エラーで表示されなくなっています。
本番サーバーでの証明書期限切れはサービス停止に直結するため、エラーが出たら即日対処が必要です。
この記事では、実際に遭遇したcertbot更新エラーとその対処手順を解説します。
CentOS 7環境での「OSError: setuptools pip wheel failed」の実際のエラーログと修正コマンド、さらに現在のRHEL 9系・Ubuntu環境でよく発生するトラブルシュートも合わせて掲載します。
無料SSL証明書として有名なLet's Encryptを使用していて、証明書更新処理で下記エラーが発生しました。
自動更新処理でも同様のエラーが発生していました。
■エラーログ
OSError: Command /opt/eff.org/certbot/venv/bin/python2.7 - setuptools pip wheel failed with error code 1
この記事のポイント
・certbot-autoのPython 2.7エラーはpython-pip+pip upgradeで解消できる
・certbot-autoは現在非推奨。EPELまたはsnapで導入するのが現在の標準
・certbot renew --dry-runで実際に更新せず動作確認が可能
・「Too many certificates」エラーは--stagingオプションで発行制限を回避できる
・openssl x509コマンドで証明書の有効期限を直接確認できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
発生した状況と実行ログの詳細
certbot-autoのrenewコマンドを実行したところ、下記のような実行ログとともにエラーが発生しました。エラーの核心は最終行の
OSErrorですが、その手前で「python-pip は利用できません」というyumのメッセージが出ており、これが直接の原因です。■実行ログ
# certbot-auto renew --force-renew --dry-run && systemctl restart nginx.service Bootstrapping dependencies for RedHat-based OSes... (you can skip this with --no-bootstrap) yum は /bin/yum です yum はハッシュされています (/bin/yum) 読み込んだプラグイン:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * extras: ftp-srv2.kddilabs.jp * rpmforge: ftp.kddilabs.jp * updates: ftp.iij.ad.jp パッケージ gcc-4.8.5-36.el7.x86_64 はインストール済みか最新バージョンです パッケージ augeas-libs-1.4.0-6.el7_6.1.x86_64 はインストール済みか最新バージョンです パッケージ 1:openssl-1.0.2k-16.el7.x86_64 はインストール済みか最新バージョンです パッケージ 1:openssl-devel-1.0.2k-16.el7.x86_64 はインストール済みか最新バージョンです パッケージ libffi-devel-3.0.13-18.el7.x86_64 はインストール済みか最新バージョンです パッケージ redhat-rpm-config-9.1.0-87.el7.centos.noarch はインストール済みか最新バージョンです パッケージ ca-certificates-2018.2.22-70.0.el7_5.noarch はインストール済みか最新バージョンです パッケージ python-devel-2.7.5-76.el7.x86_64 はインストール済みか最新バージョンです パッケージ python-virtualenv-15.1.0-2.el7.noarch はインストール済みか最新バージョンです パッケージ python-tools-2.7.5-76.el7.x86_64 はインストール済みか最新バージョンです パッケージ python-pip は利用できません。 何もしません Creating virtual environment... Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/virtualenv.py", line 2327, in
main() File "/usr/lib/python2.7/site-packages/virtualenv.py", line 712, in main symlink=options.symlink) File "/usr/lib/python2.7/site-packages/virtualenv.py", line 944, in create_environment download=download, File "/usr/lib/python2.7/site-packages/virtualenv.py", line 900, in install_wheel call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT) File "/usr/lib/python2.7/site-packages/virtualenv.py", line 796, in call_subprocess % (cmd_desc, proc.returncode)) OSError: Command /opt/eff.org/certbot/venv/bin/python2.7 - setuptools pip wheel failed with error code 1
エラーの原因と対処手順
このエラーはcertbot-autoが内部で使用するPython 2.7の仮想環境(virtualenv)を再構築しようとした際に、python-pipがシステムにインストールされていないために発生します。CentOS 7のデフォルトリポジトリには
python-pipが含まれていないため、EPELリポジトリから別途インストールする必要があります。対処としては、EPELリポジトリ経由で
python-pipをインストールし、その後pipと関連ツールをアップグレードします。■対処手順
# EPELリポジトリからpython-pipをインストール # yum --enablerepo=epel install python-pip # pipと関連ツールをアップグレード # pip install --upgrade setuptools # pip install --upgrade virtualenv # pip install --upgrade pip
certbot-auto renew --dry-runを実行すると、更新処理が正常に動作するようになりました。なお、対処後は取得済み証明書の一覧を確認して、更新状態が正常かチェックしておくと安心です。
# 取得済み証明書の一覧と有効期限を確認 $ sudo certbot certificates Found the following certs: Certificate Name: example.com Domains: example.com www.example.com Expiry Date: 2026-08-30 00:00:00+00:00 (VALID: 84 days) Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
【重要】certbot-autoは現在非推奨
運用上の重要な注意点を一つ挙げておきます。certbot-autoは2021年にEFF(Electronic Frontier Foundation)による公式サポートが終了しており、現在は非推奨です。また、CentOS 7のサポートも2024年6月に終了しているため、本番サーバーをまだCentOS 7で運用している場合は、OSのアップグレードを強く推奨します。
現在の標準的なcertbotの導入方法は以下の通りです。
Rocky Linux 9 / AlmaLinux 9(EPELリポジトリ経由)
# EPELリポジトリを追加 $ sudo dnf install epel-release -y # certbotとNginxプラグインをインストール $ sudo dnf install certbot python3-certbot-nginx -y # Apacheの場合はこちら $ sudo dnf install certbot python3-certbot-apache -y # バージョン確認 $ certbot --version certbot 2.11.0
# snapでcertbotをインストール(EFF公式推奨方法) $ sudo snap install --classic certbot # コマンドへのシンボリックリンクを作成 $ sudo ln -s /snap/bin/certbot /usr/bin/certbot # バージョン確認 $ certbot --version certbot 2.11.0
snap版を使っている場合は
sudo snap refresh certbotでいつでも最新バージョンに更新できます。certbot renew --dry-runで自動更新を事前テストする
証明書の更新処理が正常に動作するかどうかは、--dry-runオプションで確認できます。実際には証明書を書き換えず、更新処理のシミュレーションだけ行うため、運用中のサーバーへの影響がありません。
# 更新処理のシミュレーション(実際には証明書を書き換えない) $ sudo certbot renew --dry-run - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - Simulating renewal of an existing certificate for example.com Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/example.com/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulationsと表示されれば、自動更新の準備は完了です。cronまたはsystemd timerから定期実行されていれば、以降は手動操作なしで90日ごとに自動更新されます。
自動更新の設定状況はsystemd timerで確認できます。
# certbot用のsystemd timerが登録されているか確認 $ sudo systemctl list-timers | grep certbot Tue 2026-06-04 01:20:00 JST 13h left certbot-renew.timer certbot-renew.service
# rootのcrontabに追加(毎日3時と15時に更新チェック) $ sudo crontab -e 0 3,15 * * * /usr/bin/certbot renew --quiet
--quietを付けると正常時は出力を抑制し、エラー時のみcronの標準エラー出力(メール通知)に出力されます。更新後はWebサーバーが新しい証明書を読み込むために
systemctl reload nginxが必要な点も忘れずに設定してください。証明書ファイルの有効期限はopensslコマンドで直接確認できます。サーバー上で証明書を直接確認したい場合に便利です。
# 有効期限を直接確認(notBeforeとnotAfterが表示される) $ openssl x509 -noout -dates -in /etc/letsencrypt/live/example.com/cert.pem notBefore=Jun 1 00:00:00 2026 GMT notAfter=Aug 30 00:00:00 2026 GMT # 30日以内に期限切れかチェック(期限内なら "Certificate will not expire" と出力) $ openssl x509 -noout -checkend $((30*86400)) -in /etc/letsencrypt/live/example.com/cert.pem Certificate will not expire
その他のよくあるエラーと対処
1. 「Connection timed out」が出て取得・更新できない
Let's Encryptのサーバーがポート80(または443)に到達できていない状態です。ファイアウォールやクラウドのセキュリティグループでポートが閉じていると発生します。
# ファイアウォールの確認(Rocky Linux 9) $ sudo firewall-cmd --list-services dhcpv6-client http https ssh # httpが表示されない場合は追加 $ sudo firewall-cmd --add-service=http --permanent $ sudo firewall-cmd --reload
2. 「Too many certificates already issued」エラー
Let's Encryptには同一ドメインへの証明書発行レート制限(1週間に5枚まで)があります。テスト・開発中に繰り返し取得し直すと上限に達します。
テスト用にはステージング環境を使うことで制限を回避できます。ステージング証明書はブラウザで「安全でない」と表示されるため本番には使えませんが、動作確認には使えます。
# ステージング環境で証明書取得(レート制限なし・テスト用) $ sudo certbot --nginx --staging -d example.com
3. 更新後にWebサーバーへ反映されない
証明書は更新されても、WebサーバーがSSLファイルをキャッシュし続ける場合があります。更新後に自動でリロードするには
--deploy-hookを使います。# 更新成功時にNginxを自動リロード $ sudo certbot renew --deploy-hook "systemctl reload nginx" # Apacheの場合 $ sudo certbot renew --deploy-hook "systemctl reload httpd"
/etc/letsencrypt/renewal-hooks/deploy/にシェルスクリプトを置く方法が推奨です。certbotが更新するたびにそのスクリプトを自動実行します。4. 証明書の期限が切れてしまった後の強制更新
証明書の有効期限が切れてしまった場合、通常のrenewコマンドでは更新が実行されないことがあります。--force-renewalオプションで残り日数に関係なく強制更新してください。# 残り日数に関係なく強制更新 $ sudo certbot renew --force-renewal # 特定のドメインのみ強制更新 $ sudo certbot renew --cert-name example.com --force-renewal # 更新後はWebサーバーをリロードして新しい証明書を読み込ませる $ sudo systemctl reload nginx
本記事のまとめ
certbot更新エラーの原因と対処をまとめます。| エラー・症状 | 主な原因 | 対処コマンド |
|---|---|---|
| OSError: setuptools pip wheel failed | python-pipが未インストール(CentOS 7) | yum --enablerepo=epel install python-pip && pip install --upgrade setuptools virtualenv pip |
| Connection timed out | ポート80/443が閉じている | firewall-cmd --add-service=http --permanent && firewall-cmd --reload |
| Too many certificates already issued | レート制限(1週間に5枚)に達した | certbot --nginx --staging -d example.com |
| 更新後にWebサーバーへ反映されない | WebサーバーがSSLファイルをキャッシュ | certbot renew --deploy-hook "systemctl reload nginx" |
| 期限切れ後に更新できない | 自動更新が止まっていた | certbot renew --force-renewal |
| 更新の動作確認をしたい | (テスト実行) | certbot renew --dry-run |
| 証明書の有効期限を確認したい | (期限確認) | openssl x509 -noout -dates -in /etc/letsencrypt/live/example.com/cert.pem |
| 取得済み証明書の一覧を確認したい | (状態確認) | certbot certificates |
まずは
certbot renew --dry-runで現状を確認し、エラーメッセージに応じた対処を行ってください。本番サーバーの運用では、systemd timerまたはcronで定期実行されていることを定期的に確認する習慣が重要です。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Linuxサーバー構築入門マニュアル(図解60P)を無料でお渡ししています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます