我已经设置了一个子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
但仍存在两个问题:
- 浏览器将https://sm.webscraping.pro作为不安全的资源。
- 此外,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.crt
privkey-xxx.pem
ssl.sm.webscraping.pro.key
/home/admin/conf/web
SSL
WEB
有什么办法吗?
更新 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 年发布)以来已过时并被忽略;在此版本中,所有虚拟主机默认都是基于名称的虚拟主机。
同样,Order
和Allow from
都已过时;它们Require all granted
在 Apache 2.4 中被取代,而旧版本仍由兼容模块处理。