为子域名设置 SSL 证书以使用 https,Centos 7

为子域名设置 SSL 证书以使用 https,Centos 7

我已经设置了一个子sm.webscraping.pro域名http(Centos 7)。然而至于https, https:// 返回的是主域内容(webscraping.pro)。

有什么建议关于如何为子域插入另一个 SSL 证书并设置 https?

笔记:当前属于该域名的 SSL 证书不能同时用于该域名及其子域名。

更新(浏览器无法识别 SSL 证书)

1)我按照@Alex的建议使用脱水的。正如我所言教程,我最终顺利完成了所有步骤,证书也在certs文件夹中。
查看dehydrated文件夹内容:

[root@webscraping dehydrated]# tree .
.
├── accounts
│   ├── aHR0cHM6Ly9hY21lLXN0YWdpbmctdjAyLmFwaS5sZXRzZW5jcnlwdC5vcmcvZGlyZWN0b3J5Cg
│   │   ├── account_id.json
│   │   ├── account_key.pem
│   │   └── registration_info.json
│   ├── aHR0cHM6Ly9hY21lLXN0YWdpbmcuYXBpLmxldHNlbmNyeXB0Lm9yZy9kaXJlY3RvcnkK
│   ├── aHR0cHM6Ly9hY21lLXYwMi5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQo -> aHR0cHM6Ly9hY21lLXYwMS5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQo
│   ├── aHR0cHM6Ly9hY21lLXYwMjIuYXBpLmxldHNlbmNyeXB0Lm9yZy9kaXJlY3RvcnkK
│   └── aHR0cHM6Ly9hY21lLXYwMS5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQo
│       ├── account_id.json
│       ├── account_key.pem
│       └── registration_info.json
├── aHR0cHM6Ly9hY21lLXYwMS5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQo
├── archive
├── certs
│   └── sm.webscraping.pro
│       ├── cert-1637096617.csr
│       ├── cert-1637096617.pem
│       ├── cert.csr -> cert-1637096617.csr
│       ├── cert.pem -> cert-1637096617.pem
│       ├── chain-1637096617.pem
│       ├── chain.pem -> chain-1637096617.pem
│       ├── fullchain-1637096617.pem
│       ├── fullchain.pem -> fullchain-1637096617.pem
│       ├── privkey-1637096617.pem
│       └── privkey.pem -> privkey-1637096617.pem
├── chains
├── conf.d
│   └── local.sh
├── config
├── domains.txt
├── hook.d
└── hook.sh

2)我已经修改了httpd配置文件文件来引用证书文件:

 ...
  <VirtualHost *:80>
    DocumentRoot /home/admin/web/sm.webscraping.pro/public_html/public
    ServerName sm.webscraping.pro 
  </VirtualHost>

  <VirtualHost *:443>
    ServerName sm.webscraping.pro
    DocumentRoot /home/admin/web/sm.webscraping.pro/public_html/public

    SSLEngine On
    SSLCertificateFile /etc/dehydrated/certs/sm.webscraping.pro/cert.pem
    SSLCertificateKeyFile /etc/dehydrated/certs/sm.webscraping.pro/privkey.pem
    SSLCertificateChainFile /etc/dehydrated/certs/sm.webscraping.pro/fullchain.pem

  </VirtualHost>

3)重新启动Apache:

service httpd restart

但仍存在两个问题:

  1. 浏览器将https://sm.webscraping.pro作为不安全的资源
  2. 此外,sm.webscraping.pro返回主域名的内容

:-(

可能出了什么问题?

有办法解决吗?

更新 2 - 浏览器似乎根据 sm.webscraping.pro 检查主域证书

当我通过在线 SSL 检查工具检查 sm.webscraping.pro 时,后者返回了主域证书的信息:

笔记:在此检查结果中:证书中的任何通用名称均与输入的名称 (sm.webscraping.pro) 匹配。

似乎有一个冲突官方 SSL 颁发机构 (CA) 的证书与 ACME“自动证书管理环境”的证书之间……如何解决使两者发挥作用

sm.webscraping.pro 解析为 185.221.154.249
服务器类型:nginx
该证书应受所有主流 Web 浏览器信任(已安装所有正确的中间证书)。
该证书由 Sectigo 颁发。
该证书将在 323 天后过期。
证书中的任何通用名称均与输入的名称 (sm.webscraping.pro) 匹配。在网络浏览器中访问此网站时,您可能会收到错误。了解有关名称不匹配错误的更多信息。

服务器
通用名称:webscraping.pro
SAN:webscraping.pro,www.webscraping.pro
有效期:2021 年 9 月 5 日至 2022 年 10 月 6 日
序列号:fbab39085b740febae1e9cba4cee3dd8 签名算法
:sha256WithRSAEncryption
发行者:Sectigo RSA 域验证安全服务器 CA


通用名称:Sectigo RSA 域验证安全服务器 CA
组织:Sectigo Limited
位置:英国大曼彻斯特郡索尔福德
有效期:2018 年 11 月 1 日至 2030 年 12 月 31 日
序列号:7d5b5126b476ba11db74160bbc530da7
签名算法:sha384WithRSAEncryption
发行者:USERTrust RSA 认证机构

另一个证据: 在此处输入图片描述

更新 3-当前的 VirtualHost 配置

185.221.154.249:8443   is a NameVirtualHost
         default server webscraping.pro (/home/admin/conf/web/webscraping.pro.httpd.ssl.conf:1)
         port 8443 namevhost webscraping.pro (/home/admin/conf/web/webscraping.pro.httpd.ssl.conf:1)
                 alias www.webscraping.pro
         port 8443 namevhost programs.educamatch.com (/home/admin/conf/web/programs.educamatch.com.httpd              .ssl.conf:1)
                 alias www.programs.educamatch.com
185.221.154.249:8080   is a NameVirtualHost
         default server webscraping.pro (/home/admin/conf/web/webscraping.pro.httpd.conf:1)
         port 8080 namevhost webscraping.pro (/home/admin/conf/web/webscraping.pro.httpd.conf:1)
                 alias www.webscraping.pro
         port 8080 namevhost programs.educamatch.com (/home/admin/conf/web/programs.educamatch.com.httpd              .conf:1)
                 alias www.programs.educamatch.com
         port 8080 namevhost testing-ground.webscraping.pro (/home/admin/conf/web/testing-ground.webscra              ping.pro.httpd.conf:1)
                 alias www.testing-ground.webscraping.pro
         port 8080 namevhost test.webscraping.pro (/home/admin/conf/web/test.webscraping.pro.httpd.conf:              1)
                 alias www.test.webscraping.pro
         port 8080 namevhost sm.webscraping.pro (/home/admin/conf/web/sm.webscraping.pro.httpd.conf:1)
*:80                   is a NameVirtualHost
         default server sm.webscraping.pro (/etc/httpd/conf/httpd.conf:59)
         port 80 namevhost sm.webscraping.pro (/etc/httpd/conf/httpd.conf:59)
         port 80 namevhost sm.webscraping.pro (/etc/httpd/conf/httpd.conf:59)
*:443                  is a NameVirtualHost
         default server sm.webscraping.pro (/etc/httpd/conf/httpd.conf:71)
         port 443 namevhost sm.webscraping.pro (/etc/httpd/conf/httpd.conf:71)
         port 443 namevhost sm.webscraping.pro (/etc/httpd/conf/httpd.conf:71)

更新 4

我发现/home/admin/conf/web/了以下内容:

nginx.programs.educamatch.com.conf_letsencrypt   ssl.programs.educamatch.com.pem
nginx.sm.webscraping.pro.conf_letsencrypt        ssl.webscraping.pro.ca
nginx.webscraping.pro.conf_letsencrypt           ssl.webscraping.pro.crt
programs.educamatch.com.httpd.conf               ssl.webscraping.pro.key
programs.educamatch.com.httpd.ssl.conf           ssl.webscraping.pro.pem
programs.educamatch.com.nginx.conf               testing-ground.webscraping.pro.httpd.conf
programs.educamatch.com.nginx.ssl.conf           testing-ground.webscraping.pro.nginx.conf
sm.webscraping.pro.httpd.conf                    test.webscraping.pro.httpd.conf
sm.webscraping.pro.nginx.conf                    test.webscraping.pro.nginx.conf
sm.webscraping.pro.snginx.conf                   webalizer.webscraping.pro.conf
snginx.programs.educamatch.com.conf_letsencrypt  webscraping.pro.auth
snginx.sm.webscraping.pro.conf_letsencrypt       webscraping.pro.httpd.conf
snginx.webscraping.pro.conf_letsencrypt          webscraping.pro.httpd.ssl.conf
ssl.programs.educamatch.com.ca                   webscraping.pro.nginx.conf
ssl.programs.educamatch.com.crt                  webscraping.pro.nginx.ssl.conf
ssl.programs.educamatch.com.key

可能是由 VestaCP 生成的。
我应该将生成的 Let Encrypt 证书放到这里吗?

更新 5

对于主域,我有以下文件(Vesta 使用)/home/admin/conf/web

ssl.webscraping.pro.ca
ssl.webscraping.pro.crt
ssl.webscraping.pro.key
ssl.webscraping.pro.pem

虽然生成的文件脱水对于子域名只有这些/etc/dehydrated/certs/sm.webscraping.pro

cert-1637096617.csr
cert-1637096617.pem
cert.csr
cert.pem
chain-1637096617.pem
chain.pem
fullchain-1637096617.pem
fullchain.pem
privkey-1637096617.pem
privkey.pem

如何将.ca、、.crt.key文件正确映射到文件.pem夹中/home/admin/conf/web

更新 6

根据 @Alex 的评论,我将其复制到fullchain-xxx.pem目录中。然后,我在 Vesta CP 中将它们添加为证书和证书密钥(在sm.webscraping.pro 域选项卡的部分中)。参见下图:ssl.sm.webscraping.pro.crtprivkey-xxx.pemssl.sm.webscraping.pro.key/home/admin/conf/webSSLWEB

在此处输入图片描述

但仍然没有证据表明 SSL 可以正常工作: 在此处输入图片描述

有什么办法吗?

更新 7

我已更新 VestaCP,并使用 Let's Encrypt 从 CP 添加证书。结果似乎不错:

在此处输入图片描述

但识别 SSL 仍然存在问题:

在此处输入图片描述

为什么会这样?当 SSL 证书遍布整个网络时

答案1

证书对 Web 服务器返回的内容没有任何影响。只有 Web 服务器的虚拟主机配置会影响 Web 服务器为每个单独的主机名返回的内容。

在 Apache 中,您必须定义 <VirtualHost>每个新子域名的块,一个用于 ,:80另一个用于:443,并且两个块都必须将您的域名指定为ServerName。例如:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /home/example
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /home/example

    SSLEngine On
    SSLCertificateFile /etc/.../example.com.crt
    SSLCertificateKeyFile /etc/.../example.com.key
</VirtualHost>

无论提供的证书是什么,Web 服务器都会始终使用您浏览器的 HTTPHost:标头来与虚拟主机进行匹配ServerName/ServerAlias(例如,即使您使用了完全错误的证书)。

请注意,该NameVirtualHost选项自 Apache 2.4.0(2012 年发布)以来已过时并被忽略;在此版本中,所有虚拟主机默认都是基于名称的虚拟主机。

同样,OrderAllow from都已过时;它们Require all granted在 Apache 2.4 中被取代,而旧版本仍由兼容模块处理。

相关内容