centos 7 nginx Configure Let's Encrypt証明書を自動的に更新する

Let's Encryptは、ISRG(Internet Security Research Group)と呼ばれる組織によって立ち上げられた無料のセキュリティ証明書プログラムです。このプロジェクトに参加している組織および企業は、インターネットの最も重要なパイオニアであると言えます。上記の3つの勇気あるスポンサーに加えて、シスコ(グローバルネットワーク機器メーカーのリーダー)、アカマイが参加し、さらにはLinux Foundationでさえ協力に参加しており、これらの有名企業の参加により、このプロジェクトの信頼性と持続可能性が保証されています

その後、ISRGの開始者であるERG(Electronic Outpost Foundation)は、Let's Encryptプロジェクトの公式クライアントCertbotをリリースしました。これを使用して、セキュリティ証明書を完全に自動的に取得、展開、および更新できます。これは本当に簡単で便利なので、サードパーティのツールを使用せずに公式クライアントを直接使用できます。サードパーティのツールを使用することもできますが、公式のツールの方が信頼性が高く、リスクが少なく、問題が発生したときに解決しやすくなります。

事前準備

  1. ドメイン名は、国内展開用に提出する必要があります。提出していない場合、1証明書の自動ダウンロードを確認できません。2証明書の構成を手動でダウンロードした後でも、アクセスできません。
  2. nginxサーバーにマップされたドメイン名DNS解決

構成コンテンツリファレンス:https : //blog.51cto.com/wzlinux/2385116

まず、certbotをインストールします

公式ウェブサイトのアドレスhttps://certbot.eff.org/、インストール方法は公式の推奨手順を参照しています

yum install certbot python2-certbot-nginx

次に、証明書を取得します(手動取得、certbotによる自動取得などがあります。主に自動取得について説明します)

certonly certbot:唯一のconfigure nginxの証明書を手動でインストールするか、ステップでcertonlyステップを追加する手順に従っていないかもしれ平均
--nginx-サーバールートを:nginxのconfディレクトリには、指定された時にはnginxのソースからインストールされているかのconfを変更しましたパスを表示して指定する必要があります。構成されていない場合、デフォルトでは/etc/nginx/nginx.confにあります。
パスが/etc/nginx/nginx.confでない場合は、エラーが報告されます。-

Dドメイン名を指定します。複数の
-mを入力してメールボックスを設定することもできます。証明書の有効期限が切れます次のdomain.comと[email protected]を独自のドメイン名とメールボックスに置き換えるようメールで通知
します

certbot certonly --nginx --nginx-server-root /usr/local/nginx/conf -d www.domain.com -d domain.com -m [email protected]

エラーの解決策
1. ImportError:名前UnrewindableBodyError
ソリューションをインポートできません。urllib3ライブラリを再インストールしてください:

pip uninstall urllib3
pip install urllib3

2. pkg_resources.DistributionNotFound: 'urllib3 <1.23、> = 1.21.1'分布は見つかりませんでしたし、要求によって必要とされる
解决办法

easy_install urllib3==1.21.1

3. ImportError:「pyOpenSSL」モジュールに必要な機能がありません。v0.14以降にアップグレードしてみてください。
解决办法

pip install --upgrade --force-reinstall 'requests==2.6.0'

以下は、

デフォルトの証明書インストールパスが正常にインストールされたスクリーンショットです。

cd /etc/letsencrypt/live

合計4つのファイルがあります

3、手動でnginx sslを構成する

cd /usr/local/nginx/conf
vi nginx.conf

設定を追加します。次のdomain.comが独自のドメイン名に変更されていることに注意して、保存して終了してください

    server {
        listen       80;
        server_name  domain.com;
        # http重定向到https
        return       301 https://www.domain.com$request_uri;
    }

    server {
        listen       80;
        server_name  www.domain.com;
        # http重定向到https
        return       301 https://$server_name$request_uri;
    }

    server {
        # nginx1.15之后用这个语法,1.15之前用 ssl on
        listen       443 ssl;
        server_name  www.domain.com;
        # 这里的证书填刚刚生成的路径
        ssl_certificate   /etc/letsencrypt/live/www.domain.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/www.domain.com/privkey.pem;
        # 这里加载默认的ssl配置
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://127.0.0.1:8081;
            proxy_redirect off;
        }
    }

nginxホットリスタート

nginx -s reload

次に、自分のWebページを開くと、それを見ることができます。注:Alibaba Cloudサーバーを使用する場合は、セキュリティ構成ポート443が開いているかどうかを確認してください

証明書を表示、3か月間有効

4番目に、自動更新証明書を構成します

自動更新のテスト、--dry-runロゴテスト、実際には更新を実行しない

certbot renew --dry-run

エラーが発生しました:

解決策:

vi /usr/lib/python2.7/site-packages/sitecustomize.py

保存して終了するには、次のコンテンツを追加します

import sys 
sys.setdefaultencoding('utf-8') 

テストの更新を再度実行します。下の画像はテストの成功を示しています。

テスト更新が成功し
たら、スケジュールされたタスクを追加して自動更新します。以下は、ゼロポイント1,8,20での毎月の自動チェック更新証明書で、正式な有効期限の30日以内に正常に更新できます。cd / etc / letsencrypt /更新で表示できます

echo "0 0 1,8,20 * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew" | sudo tee -a /etc/crontab > /dev/null

変更ログを表示

cd /var/log/letsencrypt

5、証明書を手動で更新する

certbot renew -v

6.その他

証明書の有効期限を確認してください。この指示は少し遅いです

certbot certificates

おすすめ

転載: www.cnblogs.com/nickchou/p/12679518.html