banner
Lumos

Hi,Lumos

念念不忘,终有回响

ACME証明書申請

ウィキ#

インストール#

yum update ca-certificates # centos
apt install ca-certificates # debian

curl https://get.acme.sh | sh -s [email protected]
wget -O -  https://get.acme.sh | sh -s [email protected]

# 国内使用
# https://github.com/acmesh-official/acme.sh/wiki/Install-in-China
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m [email protected]

source ~/.bashrc
source ~/.zshrc

自動更新を有効にする

acme.sh --upgrade --auto-upgrade
acme.sh --upgrade --auto-upgrade  0 # 自動更新を無効にする

よくあるコマンド#

acme.sh --help # ヘルプ
acme.sh --list  # 証明書の一覧
acme.sh --upgrade # 更新を確認
acme.sh --issue # 証明書を申請
acme.sh --renew # 証明書を更新
acme.sh --revoke # 証明書を取り消す
acme.sh --remove # 証明書を削除
acme.sh --install-cert # 証明書をインストール

CA の切り替え#

# letsencryptに切り替え
acme.sh --set-default-ca --server letsencrypt
# zerosslに切り替え
acme.sh --set-default-ca --server zerossl

apt-get install socat

image-20241203010111740

サーバー・acmesh-official/acme.sh ウィキ・GitHub

証明書の申請#

sh acme.sh  --issue -d renalio.eu.org  --standalone
acme.sh --issue -d rsync.157077.xyz  --standalone

HTTP 認証#

スタンドアロンサービスモードを使用する#

サーバー上に Web サービスが実行されておらず、80ポートが空いている場合、acme.shは Web サーバーのふりをして、一時的に80ポートをリッスンして検証を完了できます:

acme.sh --issue --standalone -d example.com -d www.example.com -d cp.example.com

直接発行(HTTP-01 検証)#

サーバー上にウェブサイト環境がデプロイされている必要があります。(申請されたドメインが正常に開ける必要があります)
Acme は自動的にあなたのウェブサイトのルートディレクトリにファイルを配置し、(このファイルはインターネットからアクセス可能です)ドメイン所有権を検証し、検証を完了します。その後、証明書を生成できます。

ドメイン名を指定し、ドメイン名が存在するウェブサイトのルートディレクトリを指定するだけです。acme.shは自動的に検証ファイルを生成し、ウェブサイトのルートディレクトリに配置し、検証が完了した後は賢く検証ファイルを削除します。このプロセスには副作用はありません。

acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

TLS-ALPN-01 検証#

サーバー上でカスタム TLS ハンドシェイクを使用してドメインの所有権を検証します。この方法は Web サーバーがない場合に適しています。

ネットワークサーバーがない場合、smtp または ftp サーバーを使用している可能性があり、443ポートが空いています。独立した TLS ALPN モードを使用できます。acme.sh には独立した TLS ネットワークサーバーが内蔵されており、証明書を発行するために 443 ポートをリッスンできます。

acme.sh --issue -d yourdomain.com --alpn
acme.sh  --issue  -d example.com  --alpn --tlsport 8443

Nginx モードを使用する#

Nginxサーバーを使用している場合、またはリバースプロキシを使用している場合、acme.shNginxの設定から自動的に検証を完了できます。ウェブサイトのルートディレクトリを指定する必要はありません:

acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com

Apache モードを使用する#

Apacheサーバーを使用している場合、acme.shApacheの設定から自動的に検証を完了できます。ウェブサイトのルートディレクトリを指定する必要はありません:

acme.sh --issue --apache -d example.com -d www.example.com -d cp.example.com

注意:Apache モードでも Nginx モードでも、acme.sh は検証を完了した後、以前の状態に戻ります。プログラム自体の設定を勝手に変更することはありません。利点は、設定が壊れる心配がないことですが、欠点は SSL 項目を自分で設定する必要があることです。そうしないと、証明書を正常に生成できても、ウェブサイトは HTTPS を正常に使用できません。

DNS 認証#

サーバーがなく、パブリック IP がない場合、DNS の解析レコードだけで検証を完了できます。

手動検証#

ドメインに TXT 解析レコードを手動で追加する必要があります。ドメインの所有権を検証します。
手動検証を使用する場合、acme.sh は証明書を自動更新できなくなります。毎回手動で解析を追加してドメインの所有権を検証する必要があります。証明書の自動更新が必要な場合は、自動検証(DNS API)を使用してください。

acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com

その後、acme.shは対応する解析レコードを生成し、表示します。あなたはドメイン管理パネルにこの TXT レコードを追加するだけです。
解析が完了したら、次のコマンドを実行して証明書を再生成します:

acme.sh --renew -d mydomain.com

ここで使用しているのは--renewパラメータです。

自動検証(DNS API)(DNS-01 検証)#

DNS 方式の真の強力さは、ドメイン解析業者が提供する API を使用して TXT レコードを自動的に追加し、検証が完了した後に対応するレコードを削除できることです。
acme.shは現在、100 以上の DNS API をサポートしています。
DNSPod.cn を例にとると、まずDNSPod.cnにログインし、DNSPod API キーと ID を取得して設定する必要があります:

export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"

これでワイルドカード証明書を発行できます:

acme.sh --issue --dns dns_dp -d example.com -d *.example.com

DP_IdDP_Key~/.acme.sh/account.confに保存され、必要に応じて自動的に取得されるため、手動で再設定する必要はありません。
DNS API の詳細な使用法: https://github.com/acmesh-official/acme.sh/wiki/dnsapi

サポートされている DNS API には以下が含まれますが、これに限りません:

  • dns_cf:Cloudflare
  • dns_dp:DNSPod
  • dns_cx:CloudXNS
  • dns_ali:阿里云 DNS
  • dns_aws:AWS Route 53
  • dns_gd:GoDaddy
  • dns_linode:Linode
  • dns_nsupdate:BIND DNS
  • dns_ovh:OVH
  • dns_pdns:PowerDNS
  • dns_gcore:G-Core Labs

Cloudflare の例#

しばらくお待ちください…
dnsapi・acmesh-official/acme.sh ウィキ・GitHub

制限付きトークンを使用する#

複数のゾーン DNS
image.png

export CF_Account_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
export CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs"
グローバル API キーを使用する#

image.png

export CF_Key="763eac4f1bcebd8b5c95e9fc50d010b4"
export CF_Email="[email protected]"

インストール済み証明書情報の確認#

acme.sh --info -d example.com

証明書のインストール#

証明書が生成された後、対応する Apache、Nginx、または他のサーバーに証明書をコピーする必要があります。
必ず --install-cert コマンドを使用して証明書をターゲットファイルにコピーしてください。~/.acme.sh/ディレクトリ内の証明書ファイルを直接使用しないでください。これらのファイルは内部使用のものであり、ディレクトリ構造は将来的に変更される可能性があります。

Nginx の例#

acme.sh --install-cert -d example.com \
	--key-file       /path/to/keyfile/in/nginx/key.pem  \
	--fullchain-file /path/to/fullchain/nginx/cert.pem \
	--reloadcmd     "service nginx reload"

対応するパラメータ:

  • --key-file :秘密鍵ファイルのインストール先
  • --cert-file :証明書ファイルのインストール先
  • --fullchain-file :証明書チェーンファイルのインストール先
  • --reloadcmd :再起動コマンドの内容
server {
    listen 80;
    listen [::]:80;
    server_name www.exmaple.com;
    rewrite ^(.*)$ https://$host$1 permanent;
}

server {
    charset utf-8;
    listen       443 ssl;
    listen  [::]:443;
    server_name  www.exmaple.com;

    ssl_certificate    /etc/nginx/ssl/www.exmaple.com/fullchain.pem;
    ssl_certificate_key   /etc/nginx/ssl/www.exmaple.com/key.pem;

    location / {
        # rewrite ^/api-server/(.*)$ /$1 break;
        proxy_pass http://172.24.64.224:19999/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # location / {
    #     root   /usr/share/nginx/html;
    #     index  index.html index.htm;
    # }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

Apache の例#

acme.sh --install-cert -d example.com \
	--cert-file      /path/to/certfile/in/apache/cert.pem  \
	--key-file       /path/to/keyfile/in/apache/key.pem  \
	--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
	--reloadcmd     "service apache2 force-reload"

証明書の更新#

現在、証明書は 60 日ごとに自動更新され、何も操作する必要はありません。
ただし、証明書を強制的に再発行することもできます:

acme.sh --renew -d example.com --force

証明書の取り消し#

acme.sh --revoke -d dnomd343.top

証明書の削除#

acme.sh --remove -d dnomd343.top

リンク🔗#

FreeSSL#

FreeSSL.cn - 無料 HTTPS 証明書申請サイト

プロジェクトアドレス#

GitHub - acmesh-official/acme.sh: ACME クライアントプロトコルを実装した純粋な Unix シェルスクリプト

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。