2017-11-10 9 views
0

traefik이 귀하의 웹 서비스에 대한 모든 내용을 암호화 (요청 및 갱신) 할 수 있음을 알고 있습니다. 그러나 traefik은 요청 된 인증서를 인증서의 일반적인 형식이 아닌 JSON 파일로 저장합니다.저장 traefik은 json이 아닌 인증서를 암호화합니다.

내 메일 서버에도 인증서를 암호화하자. 따라서 간단한 형식으로 * .pem 또는 * .crt가 필요합니다.

내 질문 : traefik이 Let 's Encrypt 인증서를 일반적인 형식으로 저장할 수 있습니까?

도움 주셔서 감사합니다.

답변

0

면책 조항 : Traefik을 처음 사용 했으므로 잘 모르는 이보다 나은 해결책이있을 수 있습니다.

내가 수행 한 작업은 a Python script by JayH5을 사용하여 acme.json 파일에서 키 파일을 추출합니다.

def read_domain_certs(acme_json_path, domain): 
    with open(acme_json_path) as acme_json_file: 
     acme_json = json.load(acme_json_file) 

    certs_json = acme_json['DomainsCertificate']['Certs'] 
    domain_certs = [cert['Certificate'] for cert in certs_json 
        if cert['Domains']['Main'] == domain] 

    if not domain_certs: 
     raise RuntimeError(
      'Unable to find certificate for domain "%s"' % (domain,)) 
    elif len(domain_certs) > 1: 
     raise RuntimeError(
      'More than one (%d) certificates for domain "%s"' % (domain,)) 

    [domain_cert] = domain_certs 
    return (base64.b64decode(domain_cert['PrivateKey']), 
      base64.b64decode(domain_cert['Certificate'])) 

사용 사례에 따라 파일 저장을 건너 뛰고 해당 코드를 사용하여 JSON 파일에서 직접 키를로드 할 수 있습니다. 그러나 PEM 파일이 필요한 경우 디스크에 파일이 필요한 경우 스크립트는 키 내용도 기록합니다.

def write_cert(storage_dir, filename, cert_content): 
    cert_path = os.path.join(storage_dir, filename) 
    with open(cert_path, 'w') as cert_file: 
     cert_file.write(cert_content) 
    os.chmod(cert_path, 0o600)