我是一名程序员,不是系统管理员。我有一个 DreamHost VPS,我用它来搭建我的个人网站和一些业余项目,这些项目通常只是通过 HTML5 进行多媒体实验。没有什么特别严肃的事情,它们都在客户端运行。
我已开始在我的网站上包含签名证书,因为 A) 它对用户来说很好,B) 我可能会考虑在不确定的未来为一些多人游戏功能设置用户帐户,以及 C) 它还允许我一次且仅一次请求访问某些 HTML5 API。例如:语音识别每次在 HTTP 上启动时都需要重新确认,并且它会在一分钟后自动停止监听。但通过使用 HTTPS,我可以让它重新启动监听而无需用户重新确认;第一次确认就足够了。
我有两个独立的服务器正在运行:
- Apache 端口 80:https://seanmcbeth.com
- 一个基于 Node.js 的自定义 Web 服务器,位于端口 8080 上:https://seanmcbeth.com:8080。
我之所以保持这种方式,是因为 Apache 服务器已经在运行,运行良好,而我对 Node 还很陌生。我让 Apache 运行,为我网站上的静态页面提供服务,这些页面是我作品集的一部分,我相信 DreamHost 的配置比我自己配置的要好得多。Node 服务器偶尔会崩溃,有时我没注意到,这完全是我编程的错。目前将两者分开似乎是个好主意。
对于 Apache,DreamHost 自行配置了证书,并且我设置了 htaccess 规则以将 HTTP 流量重定向到 HTTPS。这样就很好了。
对于 Node 服务器,我从 DreamHost CPanel 中复制了证书和私钥,因为我不知道它们位于何处,因此无法使用 Apache 使用的相同副本。我做到了不是复制中间证书,因为我不知道该如何处理它。Node 服务器也不会自动重定向 HTTP 流量,但这可能只是因为我还没有研究过这个问题。
我今天要写的主要问题是,有时,当我在智能手机(Android 4.4.2:Chrome 37)上直接输入 Node 服务器的地址时,它会告诉我该网站“不安全”。然后我必须费尽周折才能绕过它并继续前进。这种情况从未发生在我的 PC(Windows 7:Chrome 37、Firefox 31 或 IE 11)上,如果我使用 Apache 服务器提供的页面上的链接转到 Node 服务器,这种情况也从未发生在智能手机上。我在这里发帖是因为我认为这更多的是配置问题而不是编程问题。
我会更具体地说明“不安全”部分,但现在我似乎无法复制该问题。我担心我可能已将该网站标记为例外,而现在它只是笼统地确认了这一点,但任何新用户都会看到警告。
答案1
您没有在 8080 端口上安装中间证书。如今,许多(大多数?)证书都不是直接由受信任的根证书签名的,而是由中间证书签名的,而中间证书又是由受信任的根证书签名。启用 SSL 的服务必须同时提供中间证书和“最终”证书,以便客户端验证证书是否有效且受信任。
您可以使用“openssl s_client host:port”命令进行检查,该命令会输出大量信息,但以下是与您的站点相关的差异:
$ openssl s_client -connect seanmcbeth.com:443
[...]
---
Certificate chain
0 s:/OU=Domain Control Validated/OU=Provided by New Dream Network, LLC/OU=DreamHost Basic SSL/CN=seanmcbeth.com
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=PositiveSSL CA 2
1 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=PositiveSSL CA 2
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
---
[...]
$ openssl s_client -connect seanmcbeth.com:8080
[...]
---
Certificate chain
0 s:/OU=Domain Control Validated/OU=Provided by New Dream Network, LLC/OU=DreamHost Basic SSL/CN=seanmcbeth.com
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=PositiveSSL CA 2
---
查看 8080 端口在链中没有 AddTrust 证书。