在Web浏览器中,JavaScript是否可以获取有关当前页面使用的HTTPS证书的信息?

sut*_*tch 24 javascript browser ssl certificate ssl-certificate

是否有一种JavaScript在浏览器中运行的方法,以确定哪个CA证书用于为浏览器的当前HTTPS连接验证远程主机,还获取该证书的属性,例如CA的名称?

如果没有,是否有任何其他选项以编程方式获取此信息,例如服务器端的ActiveX,Java,CGI,......?

dlo*_*ley 18

您可以使用opensource Forge项目来执行此操作.它在JavaScript中实现SSL/TLS.您可以对服务器进行ajax调用,并使用回调来检查证书.请记住,服务器是发送JavaScript的服务器,因此不应该用它来确定您是否信任JavaScript来自的服务器.Forge项目允许跨域请求,因此如果您使用它来进行信任,则可以从您已信任的服务器加载Forge JavaScript,然后联系您不信任的服务器.但是,除非该其他服务器提供跨域策略,否则您将无法执行跨域请求.

https://github.com/digitalbazaar/forge/blob/master/README.md

README中的博客链接提供了有关如何使用Forge及其工作原理的更多信息.

  • 我不认为答案是正确的 - 充其量,这是误导.似乎没有办法在客户端获取证书信息.当然,Forge是一个有趣的项目,但这比实际答案更有趣. (6认同)
  • 看起来Forge可以使用以下方法中的任何一种(不是同时使用两种方法):1.将Flash用于原始套接字.2.在WebSockets上使用TLS(这不是标准的HTTPS,但需要自定义服务器支持).这可能适用于某些人,但重要的是要知道发生了什么.请参阅https://github.com/digitalbazaar/forge/issues/97#issuecomment-33161672 (5认同)

mik*_*ana 9

复制我自己的答案是否有任何方法可以从Chrome扩展程序访问证书信息

2018回答:是的,在Firefox 62中

您需要创建一个WebExtension,也称为浏览器扩展.

请参阅访问MDN上的安全信息

您还可以查看以下文档:

你需要Firefox 62.

这是一个工作 background.js

var log = console.log.bind(console)

log(`\n\nTLS browser extension loaded`)

// https://developer.chrome.com/extensions/match_patterns
var ALL_SITES = { urls: ['<all_urls>'] }

// Mozilla doesn't use tlsInfo in extraInfoSpec 
var extraInfoSpec = ['blocking']; 

// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest/onHeadersReceived
browser.webRequest.onHeadersReceived.addListener(async function(details){
    log(`\n\nGot a request for ${details.url} with ID ${details.requestId}`)

    // Yeah this is a String, even though the content is a Number
    var requestId = details.requestId

    var securityInfo = await browser.webRequest.getSecurityInfo(requestId, {
        certificateChain: true,
        rawDER: false
    });

    log(`securityInfo: ${JSON.stringify(securityInfo, null, 2)}`)

}, ALL_SITES, extraInfoSpec) 

log('Added listener')
Run Code Online (Sandbox Code Playgroud)

manifest.json:

{
    "manifest_version": 2,
    "name": "Test extension",
    "version": "1.0",
    "description": "Test extension.",
    "icons": {
        "48": "icons/border-48.png"
    },
    "background": {
        "scripts": ["background.js"]
    },
    "permissions": [
        "webRequest",
        "webRequestBlocking",
        "<all_urls>"
    ]
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

一旦合并此代码,它也可以在Chromium中实现.