개인 PKI의 최종 엔터티 인증서에 SubjectAltNames를 어떻게 추가합니까?

개인 PKI의 최종 엔터티 인증서에 SubjectAltNames를 어떻게 추가합니까?

우리는 회사 직원만 특정 하위 도메인(예: admin.example.com)에 액세스할 수 있도록 인증서를 발급하는 내부/개인 PKI를 보유하고 있습니다.

인증서를 생성하는 데 사용하는 스크립트는 다음과 같습니다.

names="john maria foo bar"

for name in $names; do
        echo "$name"
        openssl genrsa -aes256 -out $name.key 2048

        # Creating the certificate signing request
        openssl req -new -key $name.key -out $name.csr

        # Signing the certificate
        openssl ca -in $name.csr -out $name.crt

        # Exporting both the key and the certificate in a p12 file
        openssl pkcs12 -export -clcerts -in $name.crt -inkey $name.key -out $name.p12
        # And now a bit of cleaning
        rm $name.csr
done

스크립트는 각 직원에 대해 .key, .crt 및 .p12 파일을 생성합니다. 그러면 직원은 p12 파일을 브라우저에 추가하여(회사의 CA 루트 인증서와 함께) 하위 도메인에 액세스할 수 있습니다.

하지만 최근에는 더 이상 Chrome에서 작동하지 않으며 직원이 사용하는 개인 인증서에 SAN(주체 대체 이름)을 포함해야 하는 업데이트가 있었던 것 같습니다.

다음과 같은FAQ/주제 대체 이름(SAN), OpenSSL 구성 파일을 수정했습니다.

[req]
req_extensions = v3_req

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = admin.example.com
DNS.2 = admindashboard.example.com

그러나 생성된 인증서에는 SAN이 포함되어 있지 않습니다.

.csr 파일을 손상시키는 스크립트의 마지막 부분을 제거하고 스크립트를 다시 시작한 다음 다음을 사용하여 csr 파일을 테스트했습니다.

openssl req -text -noout -in john.csr | grep DNS

이 시점에서 내가 얻은 이후로 작동하는 것 같습니다.

DNS:admin.example.com, DNS:admindashboard.example.com

그러므로.

하지만 다음 명령으로 crt 파일을 테스트하면

openssl x509 -text -noout -in john.crt | grep DNS

나는 아무것도 얻지 못했습니다.

내가 뭐 놓친 거 없니?

답변1

OpenSSL은 구성된 경우에만 요청의 확장을 인증서에 복사합니다.

이 옵션은 copy_extensions구성 파일의 섹션에서 호출됩니다.[ca]

누락되거나 설정된 경우 none확장이 요청에서 인증서로 복사되지 않습니다.

이렇게 설정하면 copy인증서에 없는 추가 확장이 요청에서 복사됩니다.

이를 설정하면 copyall모든 확장자가 복사되어 인증서의 모든 확장자를 덮어씁니다.

man ca그것에 대해 알려줄 것입니다. 경고도 함께 제공됩니다. 명령을 사용하여 요청에 임의로 서명하는 경우 openssl ca이 옵션이 설정되면 CA:True먼저 요청을 확인하세요.

관련 정보