2016-07-25 14 views
1

Ich versuche Terraform zu verwenden, um ein selbstsigniertes Zertifikat zu erstellen, das intern in einer Test-/Entwicklungsumgebung verwendet werden kann.Terraform selbstsigniertes Zertifikat Openssl Verifikation schlägt fehl

Ich erstelle zuerst einen privaten CA-Schlüssel, selbst signiertes Zertifikat.

Dann erstelle ich eine Zertifikatsanforderung und einen privaten Schlüssel für einen internen Domänennamen, für den ich HTTPS aktivieren möchte.

Dann unterzeichne ich das Zertifikat. Hier ganze Terraforming manifest ich benutze:

resource "tls_private_key" "ca" { 
    algorithm = "ECDSA" 
    ecdsa_curve = "P384" 
} 

resource "tls_self_signed_cert" "ca" { 
    key_algorithm = "${tls_private_key.ca.algorithm}" 
    private_key_pem = "${tls_private_key.ca.private_key_pem}" 

    subject { 
    common_name = "Example CA" 
    organization = "Example, Ltd" 
    country = "GB" 
    } 

    validity_period_hours = 43800 
    is_ca_certificate = true 

    allowed_uses = [ 
    "key_encipherment", 
    "digital_signature", 
    "server_auth", 
    "client_auth", 
    ] 
} 

resource "tls_private_key" "registry" { 
    algorithm = "ECDSA" 
    ecdsa_curve = "P384" 
} 

resource "tls_cert_request" "registry" { 
    key_algorithm = "${tls_private_key.registry.algorithm}" 
    private_key_pem = "${tls_private_key.registry.private_key_pem}" 

    subject { 
    common_name = "registry.test.example.com" 
    organization = "Example, Ltd" 
    country = "GB" 
    } 

    dns_names = ["registry.test.example.com"] 
} 

resource "tls_locally_signed_cert" "registry" { 
    cert_request_pem = "${tls_cert_request.registry.cert_request_pem}" 

    ca_key_algorithm = "${tls_private_key.ca.algorithm}" 
    ca_private_key_pem = "${tls_private_key.ca.private_key_pem}" 
    ca_cert_pem = "${tls_self_signed_cert.ca.cert_pem}" 

    validity_period_hours = 43800 

    allowed_uses = [ 
    "key_encipherment", 
    "digital_signature", 
    "server_auth", 
    "client_auth", 
    ] 
} 

ich das Terraforming Manifest laufen. Dann habe ich die generierten Zertifikate aus der Statusdatei extrahiert und in Dateien gespeichert.

Ich habe versucht, das endgültige Zertifikat mit OpenSSL, um zu überprüfen, aber einen Fehler:

$ openssl verify -CAfile ca-cert.pem registry.pem 
registry.pem: C = GB, ST = , L = , postalCode = , O = "Example, Ltd", OU = , CN = registry.example.com 
error 20 at 0 depth lookup:unable to get local issuer certificate 

Irgendwelche Ideen, was das Problem ist? Ich habe viel Zeit damit verbracht, das herauszufinden.

Grundsätzlich möchte ich dies verwenden, um HTTPS für eine private Docker-Registrierung in meiner Test/Dev-Umgebung zu aktivieren.

Antwort

2

Sie müssen cert_signing zum tls_private_key.ca.allowed_uses hinzuzufügen:

resource "tls_self_signed_cert" "ca" { 
    key_algorithm = "${tls_private_key.ca.algorithm}" 
    private_key_pem = "${tls_private_key.ca.private_key_pem}" 

    subject { 
    common_name = "Example CA" 
    organization = "Example, Ltd" 
    country = "GB" 
    } 

    validity_period_hours = 43800 
    is_ca_certificate = true 

    allowed_uses = [ 
    "key_encipherment", 
    "digital_signature", 
    "server_auth", 
    "client_auth", 
    "cert_signing" 
    ] 
} 

See: https://www.terraform.io/docs/providers/tls/r/self_signed_cert.html#cert_signing

Verwandte Themen