2017-11-10 10 views
0

あなたはtraefikがあなたのWebサービスのすべてのLet's Encrypt stuff(要求と更新)を行うことができます。しかし、traefikは要求された証明書をJSONファイルとして保存します。これは証明書の一般的な形式ではありません。traefikはjson以外の証明書を暗号化します

私のメールサーバーにもLet's Encrypt証明書を使用したいので、単純な形式でそれらを必要とします:* .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) 
関連する問題