Leaf 웹앱을 운영하는 여러 사이트를 운영하고 있습니다. 우리의 구성은 .NET Web API 및 Apache 2.4와 함께 Centos 7.9에서 실행됩니다.
이 시스템은 인트라넷에 접속하는 직원만 사용합니다. 자체 서명된 기관 루트 인증서, 중간 인증서, 중간 인증서에서 서명(발급)된 서버 인증서를 사용합니다. openssl
체인을 보여줍니다.
$ openssl s_client -connect leaf.ourdomain:443 -showcerts -CAfile path_to_root_cert/RootCert.cer 2> /dev/null | egrep "Certificate chain| s:| i:"
Certificate chain
0 s:/CN=leaf.ourdomain
i:/DC=org/DC=our_dc/CN=Our system CA
1 s:/DC=org/DC=our_dc/CN=Our system CA
i:/CN=Our System
우리 기관의 이름은 난독화했지만 다른 모든 것은 그대로 두었습니다.
Chrome은 Mac에서 실행 중이며 Mac의 키체인 액세스 앱에서 루트 인증서를 사용하도록 구성되어 있습니다. 이는 Leaf의 프로덕션 배포를 위한 안전한 개인 연결을 얻습니다.
프로덕션 시스템의 VM 복제본을 구성하고 있습니다. 새 개인 키와 중간 인증서로 서명된 서버 인증서를 만들었습니다. httpd.conf
새 도메인 이름에 맞게 수정되었습니다. 서버 인증서, 개인 키 및 중간 인증서가 서버에 저장되었으며 이제 이러한 httpd 속성이 이를 가리킵니다.
SSLCertificateFile "/etc/pki/tls/certs/omop-leaf-temp_hpc_our_domain_ssl.cer"
SSLCertificateKeyFile "/etc/pki/tls/private/omop-leaf-temp_hpc_our_domain_ssl.key"
SSLCertificateChainFile "/etc/pki/tls/certs/Intermediate.cer"
서버의 도메인 이름이 체크아웃된 것으로 나타납니다. 난독화되어 있습니다 omop-leaf-temp.hpc.our_domain
. 이 이름은 1) https 요청의 URL, 2) Chrome에서 보고된 오류 메시지, 3 CN
) SSLCertificateFile
. 이는 다음으로 확인됩니다.
$ openssl x509 -text -in ./omop-leaf-temp_xxxx.cer| grep CN= | grep omop
Subject: C=US, ST=xxx, L=xxx, O=Our System, OU=xxx, CN=-hpc.our_domain/emailAddress=leaf-support@xxx
그러나 프로덕션 시스템에 대한 보안 연결을 얻는 Chrome 인스턴스는 VM 복제에서 이를 수행하지 못합니다.
"PEM 인코딩 체인"은 3개의 인증서를 식별합니다. 순서대로 SSLCertificateFile
, SSLCertificateChainFile
, 그리고 Chrome이 키체인 액세스를 통해 얻는 자체 서명된 루트 인증서입니다(아마도). 제가 보기에는 괜찮은 것 같습니다.
httpd
Chrome이 연결을 시도할 때 로그( error_log
, leaf_access_log
및 포함)에 오류를 보고하지 않습니다. 이다 .leaf_ssl_error_log
LogLevel
warn
나는 당황했다. Chrome에서 보고하는 이유 Your connection is not private
와 NET::ERR_CERT_COMMON_NAME_INVALID
CN이 올바르고 인증서 체인이 양호한 경우는 무엇인가요? 이 문제를 더 자세히 조사하고 해결하려면 어떻게 해야 합니까?
감사해요
답변1
일반 이름이 잘못된 것 같습니다.
./omop-leaf-temp_xxxx.cer| grep CN= | grep omop 제목: C=US, ST=xxx, L=xxx, O=우리 시스템, OU=xxx, CN= "
그러나 "-hpc.our_domain/emailAddress=leaf-support@x"는 "omop-leaf-temp.hpc.our_domain"과 다소 다릅니다.
답변2
서버 인증서에는 @dave_thompson_085에서 지적한 대로 서버 이름을 포함하는 SAN(SubjectAlternativeName) 확장이 있어야 합니다.
이를 통해 Chrome(버전 102.0.5005.115)과 Safari(버전 15.0) 모두 서버와 보안 연결을 설정할 수 있습니다.
인증서는 다음을 사용하여 생성되었습니다.
openssl req \
-newkey rsa:4096 \
-nodes \
-keyout omop-leaf-temp_redacted.key \
-out omop-leaf-temp_redacted.csr \
-config csr_with_san.conf \
-days 730 \
-batch \
-verbose
이 구성 파일로
[ req ]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[ req_distinguished_name ]
countryName = US
stateOrProvinceName = New York
localityName = New York City
organizationName = redacted
organizationalUnitName = redacted
commonName = omop-leaf-temp.redacted
emailAddress = redacted
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = omop-leaf-temp.redacted
클라이언트가 보안 연결을 설정했는지 여부를 평가하는 코드 개발자는 잘못된 오류 대신 인증서에 SAN이 있어야 함을 나타내는 명확한 오류를 제공할 것을 촉구합니다 ERR_CERT_COMMON_NAME_INVALID
.