是否有一种使用JavaScript获取SSL证书详细信息的方法?

是否有一种使用JavaScript获取SSL证书详细信息的方法?,javascript,ssl,openssl,dom-events,Javascript,Ssl,Openssl,Dom Events,我想收集特定网站上SSL证书的某些详细信息。我知道在Linux/MacOSX上使用openssl工具很简单。但是,JavaScript中是否可能存在相同或类似的情况 我知道浏览器处理套接字连接,SSL握手发生在任何一方发送数据之前。但是,在XMLHTTPRequest中,我想知道是否可以将这些详细信息作为某种响应代码等获取?这些信息根本没有暴露在javascript中,它很少使用(因为它不可用,所以从未使用过,但很少使用)我想,这对于添加到javascript对象模型是不够重要的……对于任何很少

我想收集特定网站上SSL证书的某些详细信息。我知道在Linux/MacOSX上使用openssl工具很简单。但是,JavaScript中是否可能存在相同或类似的情况


我知道浏览器处理套接字连接,SSL握手发生在任何一方发送数据之前。但是,在XMLHTTPRequest中,我想知道是否可以将这些详细信息作为某种响应代码等获取?

这些信息根本没有暴露在javascript中,它很少使用(因为它不可用,所以从未使用过,但很少使用)我想,这对于添加到javascript对象模型是不够重要的……对于任何很少使用的特性都是一样的

当然,出于安全原因,它也可能被遗漏……我目前还没有足够的创造力来设计一个,但我确信那里也有一个漏洞。

不,不可能


可以通过javascript检测当前正在查看的页面是否通过SSL连接(document.location.protocol==“https:”),但仅此而已。

证书不是DOM的一部分,因此不可能。对不起

当前的JS语言标准没有公开证书信息;除此之外,这可能取决于您如何使用JavaScript,如果您希望最终用户的浏览器公开证书信息,那么这将是一个真正的问题,因为您需要获得最低限度的FF、Chrome、Safari、IE、Edge等。。。揭露它

然而,正如本文所提到的,这对于这些浏览器来说并不是一个理想的实现选项,因为这将允许网站开发人员编写代码错误地信任用户端凭据

阻止javascript访问浏览器当前SSL证书信息的与其说是可见性安全风险,不如说是第四道墙安全风险,JS开发人员必须意识到“用户接受的”证书不一定是网站提供的证书。HTML页面实际上不应该处理客户端代码的安全问题,相反,它应该能够依靠安全层正确地完成它的工作。(我完全理解你想要检查安全层,但你在顶层所做的任何管理工作都将是肤浅的,或者是对整个生物圈的改造)

因为我们假设javascript确实提供了一种使用证书的方法,那么当Bob因为安全性被破坏而信任Mallory时,就无法停止以下交换:

办公室工作人员Bob在Mega Corp的长城防火墙的一边,IT Mallory负责在本地传递进出公司的流量的防火墙,Web主机Alice令人敬畏的网站在WWW上

  • 根据Mega Corp.的公司政策,Bob被设置为只接受马洛里所说的表面价值
  • Bob想访问Alice的网站,但没有直接的外部访问权限,他试图通过持有他的证书(例如:“我特此声明我是Bob”)通过防火墙建立安全连接,并以一种非常复杂的方式问Alice,“我给你发了什么证书?”
  • Mallory收到了Bob的请求,但她自己却拒绝了(例如:“呃,Bob说我可以阅读他的网络邮件”),尽管Mallory不理解Bob复杂的问题,她还是向Alice重复了一遍,“akdvyfenwythnwerhy?”
  • Alice做了一些数学运算,发现“akdvyfenwythnwerhy”在问“我给你发了什么证书?”然后用她看到的回答Mallory(“嗨,Bob,我是Alice,你说:嗯,Bob说我可以看他的网络邮件”)
  • 马洛里做了一些计算,有一个哈哈的时刻“akdvyfenwythnwerhy?=我给你发了什么证书?”并代表爱丽丝回答了鲍勃的问题(“嗨,鲍勃,这是爱丽丝(马洛里),你说:我在此声明我是鲍勃”)
  • 鲍勃相信生活是美好的,并继续阅读他的网络邮件,因为根据公司政策,他知道马洛里永远不会对他撒谎
  • 马洛里现在能够阅读对话的双方,鲍勃要求他阅读给爱丽丝的网络邮件
  • Alice收到Bob的请求,说嘿,等等Bob,我需要你运行这个JS代码来证明你知道你在和Alice说话
  • Mallory获取代码,运行它,并将结果发送给Alice,表明她知道自己正在与Alice通话
  • 艾丽斯说,对我来说已经够好了,这是你的网络邮件
  • 马洛里在把鲍勃的网络邮件传给鲍勃之前先读了一遍,每个人都非常高兴
  • (注意:我没有提到运行JS服务器端的情况,这取决于运行JS代码所用的程序。)
    编辑2018年4月4日——虽然上述观点没有错,但更多的是从嵌入式和链接JS的角度出发,而不是从
    XMLHTTPRequest
    JS对象的角度出发;此外,反对与
    XMLHTTPRequest
    共享PKI详细信息的最有力论据可能如下:

    HTTPS协议的HTTP部分和S部分之间需要保持一条强有力的分界线。JavaScript及其
    XMLHTTPRequest
    对象位于该行的HTTP(应用层)端,而整个证书交换过程位于该行的s(trans/sec层)端。为了使安全端原子化(可热插拔),其内部工作不能跨线路向应用端公开;因为有一天,传输/安全层可能不再使用PKI证书来促进其安全通信服务,并且当这一天到来时,没有人需要重写任何依赖于这些证书中包含的细节来处理数据的现有JS代码
    authority     = [ userinfo "@" ] host [ "#" legalentity ] [ ":" port ]
    legalentity   = *( unreserved / pct-encoded / sub-delims )