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
. 첫 번째에는 등록하기로 선택한 모든 도메인에 공통된 정보가 포함되어 있고 두 번째에는 특정 도메인에 특정한 정보가 포함되어 있습니다. 여러 도메인에 대한 인증서를 얻는 경우 각 도메인은 에 자체 디렉터리를 갖게 되며 각 도메인에 대해 위의 --create 명령을 실행해야 합니다. 기본 구성 파일에는 주석이 잘 달려 있으며 온라인 위키를 보지 않고도 구성할 수 있습니다. 하지만 미리 읽어 보는 것도 나쁘지 않습니다(RTFM).~/.getssl
~/.getssl/yourdomain.name
~/.getssl
약간 혼란스러울 수 있는 것 중 하나는 키와 관련이 있습니다. SSL이 제대로 작동하려면 서버에 암호화 프로세스에 사용되는 키 쌍(개인/공용)이 있어야 합니다. 이것은 ... 불리운다서버 키. LetsEncrypt 사용너인증서 서버와 통신하려면 키 쌍도 필요합니다. 그게 바로 당신의 것이에요계정 키또는 LetsEncrypt 키입니다.
이미 활성화된 계정이 아닌 처음으로 GetSSL을 사용하는 새 계정의 경우 openssl을 사용하여 매우 쉽게 키를 생성할 수 있습니다. 이 명령은 하나를 생성하여 저장합니다.
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 문제를 다루고 수많은 답변을 제공했습니다.