2010-04-09 65 views
10

我想收集特定网站上的SSL证书的某​​些细节。我知道这很简单,在Linux/MacOSX上使用openssl工具。然而,在JavaScript中可能是相同或相似的?有没有办法使用JavaScript获取SSL证书详细信息?

我知道浏览器处理套接字连接,并且SSL握手发生在任何一方发送数据之前。然而,在一个XMLHTTPRequest中,我想知道它是否有可能获得这些细节作为某种响应代码等?

+0

我不认为这是可能的。 – SLaks 2010-04-09 00:41:42

+0

我一直在寻找一个Javascript API来测试跨站点请求的证明凭据,以提高站点安全性。令人遗憾的是,浏览器丢弃了这些信息,然后迫使脚本盲目地相信第三方内容现在是可信的,因为它过去是可信的。这是一种令人伤心的事态。 :-( – Wil 2017-11-25 14:15:12

+0

)有些人在响应头文件中添加了证书详细信息,在这种设置中,你可以做出一个xhr请求并读取req.getAllResponseHeaders() – Spikolynn 2017-12-02 10:49:15

回答

6

这个信息根本不会暴露给javascript,它很少被使用(因为它不可用,所以它永远不会被使用,但它很少被使用),它被认为不足以添加到javascript对象模型我想......对于任何非常少用的功能都是一样的。

当然,出于安全考虑,它也可能被排除在外......我现在没有足够的创造力去推出一款,但我相信这里也有一个漏洞利用。

+8

没有安全原因,证书是公共值 – 2010-04-09 01:02:10

+0

@GregS-我想不出其中一个......但我以前说过100次,有人会想出一个我将永远不会拥有的漏洞,我认为不同的思维模式......所以我只是在那里抛出这个选项。主持问题的JavaScript ......你不会是那个已经有了证书的人吗?这就是让我认为可能会有更多的恶意使用*不知何故*因为我说,但绝对不是我的专业领域,我会留给你和其他专门研究这个领域的人详细说明可能的结果 – 2010-04-09 01:17:58

+0

感谢Nick,我想我必须考虑如何以跨平台的方式获取客户端的SSL细节,同取出JS或安装备用二进制文件(如openssl,curl/wget)。 – shaond 2010-04-09 01:34:45

1

不,不可能。

可以通过javascript检测当前浏览的页面是否通过SSL连接(document.location.protocol ==“https:”),但这就是它。

2

证书不是DOM的一部分,所以不会,这是不可能的。抱歉!

-1

当前JS语言标准不公开证书信息;除此之外它可能取决于你如何使用JavaScript,如果你期望最终用户的浏览器公开证书信息,那么它会有问题,因为你需要获得最低的FF,Chrome,Safari,IE ,边缘......揭露它。

但是,正如Information Security post所述,这对于这些浏览器来说并不是一个理想的选择,因为它可以允许网站开发人员编写代码来错误地信任用户端证书。

与JS开发人员必须意识到“用户接受”证书不是“可接受”证书不同必然是网站提供的那个。 HTML页面实际上不应该处理客户端代码的安全问题,而是应该能够依靠安全层来正确执行它的工作。 (我完全可以理解想要检查安全层,但是你在顶层做的任何管理工作只是表面上的或者是对整个生物圈的修改)

因为让我们暂时假设javascript确实提供了一种方法来处理证书,然后当Bob已经信任Mallory,因为他的安全性被破坏时,无法停止以下交换:

办公室工作人员Bob位于Mega Corp.的伟大防火墙的一侧,IT Mallory负责防火墙在本地传送和传出公司流量,Web Host Alice的真棒网站在WWW上。

  1. 作者:Mega Corp.公司政策鲍勃被设置为接受马洛里所说的面值。
  2. Bob想访问Alice的网站,但没有直接的外部访问权限,试图通过持有证书(例如:“我在此声明我是Bob”)通过防火墙建立安全连接并询问Alice真是令人费解的方式,“我发给你什么证书?”
  3. 马洛里得到鲍勃的请求,而是自己传递(例如:“呃,鲍勃说我可以阅读他的webmail”),即使马洛里不理解鲍勃的复杂问题,她仍然重复给艾丽丝,“akdvyfenwythnwerhy?”。
  4. 爱丽丝做了一些数学计算,“akdvyfenwythnwerhy?”问:“我发给你什么证书?”并以她所看到的回答马洛里(“你好,鲍勃,你是爱丽丝,你说:呃,鲍勃说,我可以阅读他的网络邮件)”。
  5. 马洛里做了一些数学计算,有一个啊哈哈一刻“akdvyfenwythnwerhy?=我发给你什么证书?”,并代表爱丽丝回答鲍勃的问题(“你好鲍勃这是爱丽丝(Mallory)你说过:我特此声明我是Bob“)。
  6. 鲍勃认为生活是好的,并继续阅读他的网络邮件,因为通过公司政策,他知道马洛里绝不会骗他。
  7. 马洛里现在能够阅读对话的两面传递鲍勃的请求,以读取他的网络邮件给爱丽丝。
  8. Alice收到Bob的请求,并说他等一下Bob我需要你运行这个JS代码来证明你知道你在和Alice交谈。
  9. Mallory获取代码,运行它,并发送结果,说明她知道她正在与Alice交谈回Alice。
  10. 爱丽丝说,对我来说足够好,这里是你的网络邮件。
  11. Mallory在将它传递给Bob之前读取Bob的webmail,并且每个人都很高兴。

(注:我并没有解决,你正在运行JS服务器端的话,那么这将取决于你使用的运行您的JS代码什么程序。)

+1

你的回答没有解决这个问题。问题是Javascript是否可以访问已经被浏览器传输层证明的证书中的数据。不幸的是浏览器丢弃它。他的问题中没有任何内容暗示以Javascript实施运输,或绕过运输安全。 -1 – Wil 2017-11-25 14:28:45

+0

@Wil,看看你的意见分散在整个线程中我相信你正在尝试使用JS时,你应该看看一个PHP或ASP解决方案。 JS是客户端,如果你试图检查用户机器上的证书信息,这在游戏中有点晚了。 – 2017-12-08 17:36:14

相关问题