2016-07-25 3 views
1

Я пытаюсь использовать Terraform для создания самоподписанного сертификата для внутреннего использования в среде тестирования/разработки.Terraform Self Signed Certificate Проверка подлинности Openssl

Сначала я создаю закрытый ключ CA, самоподписанный сертификат.

Затем я создаю запрос подписи сертификата и закрытый ключ для внутреннего имени домена. Я хочу включить HTTPS.

Затем я подписываю сертификат. Вот весь манифест Terraform, который я использую:

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", 
    ] 
} 

Я запустил манифест Terraform. Затем я извлек сгенерированные сертификаты из файла состояния и сохранил их в файлах.

Я попытался проверить окончательный сертификат с OpenSSL, но получаю сообщение об ошибке:

$ 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 

Любые идеи, в чем проблема? Я потратил много времени, пытаясь понять это.

В принципе, я хочу использовать это, чтобы включить HTTPS для частного реестра Docker в моей среде test/dev.

ответ

2

Вам нужно добавить cert_signing к tls_private_key.ca.allowed_uses:

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" 
    ] 
} 

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

 Смежные вопросы

  • Нет связанных вопросов^_^