我安装了 Go Daddy SSL 证书,除 Android 以外在其他任何地方都能正常运行。
https://www.ssllabs.com/ssltest/analyze.html 说链条不完整,我继续读下去堆栈溢出错误顺序的 SSL 链将会在 Android 上失败。
但是我该如何整理呢?在我的服务器上?SSL 证书本身需要重新密钥吗?在 FTP 上移动内容吗?
答案1
按照 zakjan 的回答,当我尝试使用 jquery 在 android webview 中对我新保护的服务器执行 AJAX 请求时遇到了问题。它在浏览器中有效,但在我的应用程序中无效。
我使用过这个网站:https://certificatechain.io/
我粘贴了从 Comodo (positiveSSL) 获得的已签名 .crt 文件的文本,它返回了我需要的所有内容。我将其保存为我的域名 + “chain.crt”(见下文)
然后,在我的 apache 配置中,我为该特定虚拟主机输入了类似这样的内容:
SSLEngine On
SSLCertificateFile /etc/ssl/localcerts/example_com.crt
SSLCertificateKeyFile /etc/ssl/localcerts/example.com.key
SSLCACertificateFile /etc/ssl/localcerts/example.com.chain.crt
之后,我的 Android 应用的 webview 使用 ajax 向我的服务器发送 POST 消息时就没问题了。我在 2 台真实设备上尝试过,一台运行 2.3.4,一台运行 4.something。在运行 2.3 的模拟器上也试过了。全部成功。
我希望这有帮助。
答案2
该链位于 crt 文件中,原始 SSL 正在运行。
对于 GoDaddy,有第二个证书 - gd_bundle.crt
复制此信息并将其添加到服务器上安装的 crt。
因此,服务器上的原始 crt 有 1 个证书,之后同一文件上会有 3 个证书。这就是链。
我仍然在 ssllabs.com 上遇到包含锚链的问题,但这不是问题,只是一个保留或删除的选项 - 根据 -https://security.stackexchange.com/questions/24561/ssltest-chain-issues-contains-anchor/24566#24566
答案3
你可以解决证书链不完整通过将证书中的所有证书连接到受信任的根证书(按此顺序排除)来手动颁发,以防止此类问题。请注意,受信任的根证书不应存在,因为它已包含在系统的根证书存储中。
您应该能够从颁发者处获取中间证书并自行将它们连接在一起。顺便说一句,我已经编写了一个脚本来自动化该过程,它需要一个证书来生成正确链接的证书的输出。https://github.com/zakjan/cert-chain-resolver