SSL:链问题!>> Windows 2012 R2 上的 GoDaddy + Apache 2.4.23

SSL:链问题!>> Windows 2012 R2 上的 GoDaddy + Apache 2.4.23

大家下午好,

我完全被困住了。不知道该怎么做,也不知道我做错了什么。我希望你能帮助我,因为我已经阅读了很多资料来解决这个问题,但没有成功……

我有:

  • 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.0SSLCACertificateFile...PathSSLCertificate{Chain,}File

(已添加)具体来说,要使用,SSLCACertificateFile您只需将所有需要的 CA 证书(以及可选的不需要的证书)连接到一个文件中。由于 PEM 格式的数据在设计上都是可打印/可见的,因此您可以通过在纯文本编辑器(如记事本)中剪切和粘贴来执行此操作,此外还可以使用特定工具(如catUnix 或copy a+b+cWindows)或>>outfile附加到任一文件中。

PS:Apache 不使用 Windows 证书存储区,因此在 Windows 证书存储区中安装东西对它完全没有影响。

PPS:如果你在 Windows 上没有 OpenSSL 命令行,那么有一个很好的预构建包http://www.slproweb.com/products/Win32OpenSSL.html

答案3

感谢大家的帮助。你们提供的所有信息都非常有价值,让我能够按要求配置我的 CONF 文件。非常完美。

话虽如此,我已经找到了我的具体问题及其解决方案。

我的 Apache 前端位于 WAF(Web 应用程序防火墙)后面。链式连接已中断。因此中间 CA 没有提供主要证书。然后,解决了这个问题:一切就绪!

真是头疼啊小子……

向大家致以亲切的问候!

相关内容