シェルスクリプトを使用してLetsEncrypt証明書を取得できますか?

シェルスクリプトを使用してLetsEncrypt証明書を取得できますか?

Let's Encrypt証明書を取得するためのシェルスクリプトを生成したいと思います。

#!/bin/bash
sudo docker run -it --rm -p 443:443 -p 80:80 --name certbot \
    -v "/etc/letsencrypt:/etc/letsencrypt" \
    -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
    quay.io/letsencrypt/letsencrypt:latest certonly

ただし、一部の情報を手動で提供する必要があります。

  • メールアドレス
  • オプション2(スタンドアロン)
  • エリア

これらの入力を自動化できますか?

ベストアンサー1

車輪がない場合は、車輪を再発明しないでください。他の人(実際には複数人)がシェルスクリプトを使用して、LetEncrypt証明書を取得および更新するプロセスを自動化するスクリプトを作成しました。 LetsEncryptにはサードパーティのクライアントのリストが含まれています。ここ

OPがシェルスクリプトについて尋ねたので、これは特別な質問です。SSLを取得、私はそれを見て、試してみました。完全にオープンソースであり、GNU GPL3のライセンスに基づいてライセンスされています。まだ一つあります。ウィキペディアここでは、問題報告へのリンクだけでなく使用法もよく説明しています。また、著者は「serverco」という名前でLetsEncryptコミュニティフォーラムで非常に活発に活動しており、そこから質問に答えます。

シェルスクリプトなのでインストールが簡単です。 (ここで使用されているすべてのパスは私に役立つ例ですが、必要に応じて変更できます。)上記のリンクからgetsslファイルをbinフォルダにダウンロードします。もちろん、他の場所も可能ですが、binフォルダにあると操作が簡単になります。実行可能にしてください。次に実行します。

$ wget -O - https://raw.githubusercontent.com/srvrco/getssl/master/getssl > ~/bin/getssl
$ chmod 0700 ~/bin/getssl
$ getssl --create yourdomain.name

このオプションは、に--createデフォルトプロファイル()を作成しますgetssl.cfg。最初には、登録することを選択したすべてのドメインに共通の情報が含まれ、2番目には特定のドメインに固有の情報が含まれています。複数のドメインの証明書を取得する場合、各ドメインには独自のディレクトリがあり、各ドメインに対して上記の--createコマンドを実行する必要があります。デフォルトの設定ファイルには注釈があり、オンラインウィキを見なくても設定できます。しかし、あらかじめ読んでみるのも悪くありません(RTFM)。~/.getssl~/.getssl/yourdomain.name~/.getssl

少し混乱する可能性のあるものの1つは、キーに関連しています。 SSLが正常に機能するには、サーバーに暗号化プロセスに使用される鍵ペア(プライベート/パブリック)が必要です。これは…サーバーキー。 LetsEncryptの使用あなた証明書サーバーと通信するには、鍵ペアも必要です。それがあなたのものです。アカウントキーまたは LetsEncrypt キーです。

すでにアクティブなアカウントではなく、最初にGetSSLを使用する新しいアカウントの場合は、opensslを使用して非常に簡単にキーを生成できます。このコマンドは1つを生成して保存します。

openssl genrsa 4096 > ~/.getssl/LE_account.key

一方、すでにLetsEncryptを使用している場合は、アカウントキーがすでにどこかにあります。それからあなたは〜しなければならない引き続き同じキーを使用して保持している証明書を更新するか、必要に応じて証明書をキャンセルしてください。他の顧客がアカウントキーのコピーをどこに保管しているかわかりませんが、certbot顧客がアカウントキーをどこに保存しているかを説明するリソースが見つかりました。究極のために書かれたが、このガイドcertbotファイルからアカウントキーを「抽出」する方法を説明してください。

GetSSLクライアントはアカウントキーが標準のPEM形式であると予想しますが、certbotクライアントはそれを別の形式のJSON構造内に保存し、キーを抽出して変換する必要があります。これを行うには、Pythonが必要なJonLundyの他のツールを使用する必要があるため、GetSSLにPythonが必要なくてもこれを行う必要があります。上記のサンプルファイル構造に対して修正された特定のプロセスは次のとおりです。

$ wget -O - "https://gist.githubusercontent.com/JonLundy/f25c99ee0770e19dc595/raw/6035c1c8938fae85810de6aad1ecf6e2db663e26/conv.py" > conv.py
$ cp /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/<id>/private_key.json private_key.json
$ openssl asn1parse -noout -out private_key.der -genconf <(python conv.py private_key.json)
$ openssl rsa -in private_key.der -inform der > ~/.gelssl/LE_account.key
$ rm conv.py private_key.json private_key.der

最後の行は、おそらくより安全なものに置き換える必要があります。結局、これには非常に重要な秘密鍵が含まれます。たぶん似たようなものがshred -zun13 private_key.json; shred -zun13 private_key.der良いかもしれません。

私はセキュリティの専門家でもサーバーの専門家でもないので、GetSSLやその実装のこれらの側面について議論することはできません。もっとうまく解決することができます。サーバー障害。また、GetSSLに関するほとんどの質問には回答できません。 GetSSLへの答えを最も早く得ることができる場所は次のとおりです。コミュニティLetsEncryptのウェブサイトはservercoでよく見られます。このフォーラムの他の多くの人々もGetSSLの問題に対処し、多くの答えを提供しました。

おすすめ記事