大家下午好,
我完全被困住了。不知道该怎么做,也不知道我做错了什么。我希望你能帮助我,因为我已经阅读了很多资料来解决这个问题,但没有成功……
我有:
- Windows 2012 R2 服务器
- 其上安装了 Apache 2.4.23,并使用 MOD_JK 将所有请求代理传递到另一台机器上的 Tomcat 服务器。
我已经在 GoDaddy 上购买了扩展证书,因此我可以在 URL 栏上获得“绿色徽章”。
现在,我已经从 GoDaddy 下载了证书,ZIP 内包含正确的证书和 G2+G1+ROOT 捆绑证书。所以里面有 2 个文件。
将它们放在一个文件夹中,并在 443 VHOST 中正确指定,正如您接下来将看到的,但我在互联网上进行的每个 SSL 测试(SSLLabs、DigiCert……)链接过程失败。
地点:西班牙商行
https://www.ssllabs.com/ssltest/analyze.html?d=cliente.merchbanc.es&hideResults=on
https://www.sslshopper.com/ssl-checker.html#hostname=cliente.merchbanc.es
不知道我做错了什么……我让 HTTPD.CONF 按照原样准备就绪(当然,正确且需要的模块已取消注释),但没有任何与 VHOSTS 和 SSL 相关的内容。然后,在额外的配置文件 VHOST 上,我添加了所有 VHOST 内容 + SSL(因此我没有使用 SSL 配置文件。它已注释。所有内容都在 VHOSTS 配置文件上。)。
它看起来像这样:
##################################################################################################################
# VHOSTS HTTP
# redirect all HTTP to HTTPS (optional)
<VirtualHost *:80>
ServerAlias *
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</VirtualHost>
##################################################################################################################
# VHOSTS HTTPS
Listen 443
# modern configuration, tweak to your needs
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLProxyProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLProxyCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:c:/lala/lele/ssl_scache(512000)"
SSLSessionCacheTimeout 300
# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache "shmcb:c:/lala/lele/ocsp(128000)"
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile "blah/blahblah/cliente.merchbanc.es/123412341234.crt"
SSLCertificateKeyFile "blah/blahblah/cliente.merchbanc.es/123412341324.key"
#SSLCertificateChainFile "blah/blahblah/cliente.merchbanc.es/gd_bundle-g2-g1.crt"
SSLCACertificatePath "blah/blahblah/cliente.merchbanc.es/GoDaddy_G2"
# Uncomment the following directive when using client certificate authentication
#SSLCACertificateFile /path/to/ca_certs_for_client_authentication
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
...
... follows with the ProxyPassing part, but not the case now.
...
</VirtualHost>
按照 GoDaddy 安装说明网页,我更改了SSL证书链文件指令,SSLCA证书路径指令,因为我使用的是 2.4.23 版的 Apache。但它没有解决任何问题。
之后,我决定下载全部G2 证书来自这里: https://certs.godaddy.com/repository
并将它们全部放入 SSLCACertificatePath 路径上指定的文件夹中:“blah/blahblah/cliente.merchbanc.es/GoDaddy_G2”。但不起作用。
最后,因为我使用的是 Windows,所以我决定去获取证书,然后双击它们,在服务器上安装它们,现在它们位于“Internet 选项 > 内容 > 证书”,全部分布在各个现有选项卡上。并且像往常一样,根本没有任何变化。
当然,每次都要重新启动 Apache,甚至在 Windows 上安装证书后也要重新启动服务器本身。
那么现在该怎么办?希望你能帮助我。
谢谢并致以亲切的问候。
标记。
答案1
您需要取消注释证书链文件行
#SSLCertificateChainFile "blah/blahblah/cliente.merchbanc.es/gd_bundle-g2-g1.crt"
应该:
SSLCertificateChainFile "blah/blahblah/cliente.merchbanc.es/gd_bundle-g2-g1.crt"
答案2
要么是说明(您没有识别)是乱码,要么是您误读了它们。
2.4.8 版本的变化是,你可以并且应该将你的链证书放入SSLCertificateFile
代替SSLCertificateChainFile
。
全部SSLCACertificate{File,Path}
如果未提供,版本将使用中的证书来完成您的链SSLCertificate{Chain,}File
,但SSLCA*
如果启用了证书,它还将应用于客户端身份验证,这可能是或可能不是希望的。
但要使用SSLCACertificatePath
(不是...File
)每个证书都必须放在单独的文件中,并且每个文件必须命名(或链接,算作名称)使用哈希其主题;在 Unix 上,使用符号链接是常规做法(但并非严格必要)。
在按照上游约定安装 OpenSSL 的 Unix 系统上(并非所有系统都如此),c_rehash
某个地方(尽管可能不在您的正常 PATH 中)有一个脚本可以执行此操作;如果是这样,应该有一个手册页(有时在像 1ssl 这样的特殊部分中)网络上也有rehash
。OpenSSL 1.1.0(仅)在某些系统的命令行可执行文件中具有等效功能openssl
。由于您可能没有这些,您可以在每个证书文件上手动运行openssl x509 -hash
(或等效但更精确的),并使用这些加号重命名或复制文件。但(不是)或更容易。-subject_hash
.0
SSLCACertificateFile
...Path
SSLCertificate{Chain,}File
(已添加)具体来说,要使用,SSLCACertificateFile
您只需将所有需要的 CA 证书(以及可选的不需要的证书)连接到一个文件中。由于 PEM 格式的数据在设计上都是可打印/可见的,因此您可以通过在纯文本编辑器(如记事本)中剪切和粘贴来执行此操作,此外还可以使用特定工具(如cat
Unix 或copy a+b+c
Windows)或>>outfile
附加到任一文件中。
PS:Apache 不使用 Windows 证书存储区,因此在 Windows 证书存储区中安装东西对它完全没有影响。
PPS:如果你在 Windows 上没有 OpenSSL 命令行,那么有一个很好的预构建包http://www.slproweb.com/products/Win32OpenSSL.html
答案3
感谢大家的帮助。你们提供的所有信息都非常有价值,让我能够按要求配置我的 CONF 文件。非常完美。
话虽如此,我已经找到了我的具体问题及其解决方案。
我的 Apache 前端位于 WAF(Web 应用程序防火墙)后面。链式连接已中断。因此中间 CA 没有提供主要证书。然后,解决了这个问题:一切就绪!
真是头疼啊小子……
向大家致以亲切的问候!