【问题标题】:Detect unsecure ssl-Connection检测不安全的 ssl 连接
【发布时间】:2019-02-05 09:33:46
【问题描述】:

我们正在运行一个使用自签名 ssl 证书的 Intranet 应用程序。

客户确实信任我们的 CA。

多年来我们一直在使用这种方式。

在某些 PC 上,我们的 CA 没有导入,用户每天都会收到来自浏览器的警告。

很遗憾,用户没有告诉我们这一点,他们只是一遍又一遍地说“接受证书”。

有没有办法检测页面的信任度?

如果浏览器确实手动接受了证书,我们正在运行 Web 应用程序并希望得到注释。然后我们可以联系 PC 的管理员并向他发送 PC 不信任我们的 CA 的提示。

也许这种方式可以检测到JavaScript?

这很好:

如果它看起来像这样,我们希望得到一个注释:

更新我不对客户端 PC 负责。我无权访问它们来安装或管理证书。

【问题讨论】:

  • 你不能用window.location.protocol看看是不是https:吗?
  • @NikKyriakides 请查看带有红色文字的图像。那里使用“https”。问题是关于 https 连接的状态。它是否受信任?
  • 我完全错了。 https: 报告即使证书。被视为无效。
  • 只需创建一个使用相同证书签名的子域checker.yourdomain.com,向该子域创建一个ajax请求,如果用户使用无效证书浏览您的域,它将失败。我认为 JavaScript 无法访问 SSL 证书状态。
  • @MunimMunna 是的,一个新的子域可以工作。但他的配置意味着很多。相同的设置在 20 个不同的位置使用了 20 次。但我想应该可以。感谢您的提示。

标签: javascript ssl ssl-certificate self-signed


【解决方案1】:

这是可能的,但是browser support 目前不是很高。 如果您可以忍受只支持基于 chromium 的浏览器和 firefox(这些确实构成了大多数用户代理),您可以使用

window.isSecureContext

查看浏览器是否信任您的证书。 因此,为了记录每次有人不信任您的证书时,您可以这样做:

if (!window.isSecureContext){
    //do ajax call
}

【讨论】:

  • 感谢您的回答。顺便说一句,我在您的 StackO 页面上读到“总是乐于学习新事物。”。你已经五年没有问过问题了。你还乐于学习新东西吗?
  • 是的 :),我只是更喜欢在不打扰别人的情况下学习。当我第一次获得我的帐户时,我问了一堆让 stackoverflow 用户群恼火的可怕问题,所以当我不问问题就能找到信息时,我更喜欢这样。 @guettli
【解决方案2】:

信息不通过 Javascript 公开(参考 Is there a way to get SSL certificate details using JavaScript?)。

根据情况,您可以:

1) 使用组策略将 CA 部署到所有 PC
2) 使用其他管理软件部署CA
3) 使用实际受信任的证书颁发机构(通过购买证书或使用 Let's Encrypt)

这是一个非详尽的列表,所以如果您有更多关于您的环境的信息,我可以提供其他选项。

【讨论】:

  • 我不对客户端 PC 负责。我无权访问它们来安装或管理证书。
  • 所以它是您在可路由域上开发的应用程序?如果是,我强烈建议使用 Let's Encrypt 获得免费的 SSL 证书。
  • 不幸的是,它不在可路由的域上。它仅在 Intranet 中。我在不同的环境中使用 Let's Encrypt。工作正常。
  • 如果有边缘机器,是否可以在其上运行例如 HAProxy / Traefik 并从 WAN 代理到内部?这样您就可以使用可路由的域来访问机器。您仍然可以通过防火墙阻止外部访问。
  • 我知道从具有官方ip和名称的边缘机器到内网的反向代理可以解决这个问题。但这在我目前的情况下不可用。
猜你喜欢
  • 2016-08-27
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2013-02-13
相关资源
最近更新 更多