我们运营多个运行 Leaf Web 应用的站点。我们的配置在 Centos 7.9 上运行,带有 .NET Web API 和 Apache 2.4。
该系统仅供访问我们内联网的员工使用。它使用自签名的机构根证书、中间证书以及由中间证书签名(颁发)的服务器证书。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 的 Keychain Access 应用中的根证书。这为 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 通过 Keychain Access 获取的自签名根证书(我猜)。这对我来说似乎没问题。
httpd
当 Chrome 尝试连接时,不会在日志中报告错误(包括error_log
、leaf_access_log
和)。是。leaf_ssl_error_log
LogLevel
warn
我很困惑。为什么 Chrome 会报告CN 正确Your connection is not private
且NET::ERR_CERT_COMMON_NAME_INVALID
证书链良好?我该怎么做才能进一步调查并修复此问题?
谢谢
答案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 指出的那样,服务器的证书需要具有包含服务器名称的 SubjectAlternativeName (SAN) 扩展。
这使得 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
。