2016-07-25 4 views
1

테스트/개발 환경에서 내부적으로 사용할 자체 서명 된 인증서를 작성하기 위해 Terraform을 사용하려고합니다.Terraform 자체 서명 인증서 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 

문제가 무엇인지 어떤 아이디어? 나는 이것을 알아 내려고 많은 시간을 보냈다.

기본적으로 내 테스트/dev 환경에서 개인 Docker 레지스트리에 HTTPS를 사용하려면이 옵션을 사용하고 싶습니다.

답변

2

당신은 tls_private_key.ca.allowed_usescert_signing을 추가해야

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