我们运营多个运行 Leaf webapp 的站点。我们的配置在 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 的钥匙串访问应用程序中的根证书。这为 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 会报告Your connection is not private
以及NET::ERR_CERT_COMMON_NAME_INVALID
CN 正确且证书链良好的情况?我可以做些什么来进一步调查和解决这个问题?
谢谢
通用名称看起来不对:
但是“-hpc.our_domain/emailAddress=leaf-support@x”与“omop-leaf-temp.hpc.our_domain”有很大不同
正如@dave_thompson_085 所指出的,服务器的证书需要有一个包含服务器名称的 SubjectAlternativeName (SAN) 扩展。
这使 Chrome(版本 102.0.5005.115)和 Safari(版本 15.0)都可以与服务器建立安全连接。
证书是使用创建的
使用这个配置文件
我敦促评估客户端是否已建立安全连接的代码的开发人员提供明确的错误,表明证书需要 SAN 而不是不正确的错误
ERR_CERT_COMMON_NAME_INVALID
。