Let’s Encrypt証明書発行を「acme.sh」で発行する

2021-07-12

acme.shで無料SSL証明書を発行する

CentOS 6系のサーバーでPythonのバージョンが古く、最新のcertbot を使えなかったのでシェルスクリプトで動作する「acme.sh」でワイルドカード形式の無償SSL証明書を発行しました

acme.shをインストール

acme.shをダウンロードしてインストールします。インストールは簡単にcurlでダウンロードしてシェルを実行すればインストールできます

$ cd /usr/local/src
$ curl https://get.acme.sh | sh

一度ステージング環境で実行します。ワイルドカード証明書を発行するのでDNSにTXTレコードの登録が必要ですので、その必要な値が表示されます

ステージングで一度実行
.acme.sh/acme.sh --test --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d *.example.com

[Mon Apr  6 11:03:09 JST 2020] Add the following TXT record:
[Mon Apr  6 11:03:09 JST 2020] Domain: '_acme-challenge.example.com'
[Mon Apr  6 11:03:09 JST 2020] TXT value: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

今回、インストールしたサーバーのDNSは自前のDNSサーバーですので、テキストレコードを登録できるのでテキストレコードに登録しました

DNSレコードが登録できたら、再度、acme.shを実行して証明書を発行します

$ .acme.sh/acme.sh  --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d *.example.com --renew

[Tue Apr  7 10:06:18 JST 2020] Your cert is in  /home/admin/.acme.sh/*.site-mg.com/*.example.com.cer 
[Tue Apr  7 10:06:18 JST 2020] Your cert key is in  /home/admin/.acme.sh/*.site-mg.com/*.example.com.key 
[Tue Apr  7 10:06:18 JST 2020] The intermediate CA cert is in  /home/admin/.acme.sh/*.example.com/ca.cer 
[Tue Apr  7 10:06:18 JST 2020] And the full chain certs is there:  /home/admin/.acme.sh/*.example.com/fullchain.cer

Apacheにワイルドカード証明書を登録する

発行したワイルドカードをapacheに設定して再起動します。設定箇所は証明書の箇所のみ記載しています

# vim /etc/httpd/conf.d/ssl.conf
 SSLCertificateKeyFile /root/.acme.sh/example.com/example.com.key 
 SSLCertificateFile    /root/.acme.sh/example.com/example.com.cer 
 SSLCACertificateFile  /root/.acme.sh/example.com/ca.cer 
# /etc/init.d/httpd restart

証明書エラーになった場合の対処

ステージング環境で証明書を発行した場合、ルート証明書が「Face LE Intermediate X1」となりエラーになる場合があります。
下記のopensslコマンドでは、cerファイルの中身を確認してIssuerが値を取得しています。「Face LE Intermediate X1」となっているのでステージング環境での証明書となるので、SSL接続すると証明書エラーになります

$  openssl x509 -noout -text -in \*.example.com.cer  | grep "Issuer" 
        Issuer: CN=Fake LE Intermediate X1
                CA Issuers - URI:http://cert.stg-int-x1.letsencrypt.org/

その場合は「–force」をつけて強制再発行する必要があります。

# DNSを「--force」をつけて実行します。その後はDNSのTXTレコードを登録します
$ ./acme.sh --force --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d *.example.com

# DNSのTXTレコードが浸透したら、下記のコマンドで証明書を強制的に発行します
$ ./acme.sh --force --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d *.example.com --renew

 

 

スポンサーリンク

LinuxCentOS 6

Posted by admin