Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在浏览器环境中,是否可以获取JavaScript中的SSL证书列表?_Javascript_Ssl_Openssl_Ssl Certificate - Fatal编程技术网

在浏览器环境中,是否可以获取JavaScript中的SSL证书列表?

在浏览器环境中,是否可以获取JavaScript中的SSL证书列表?,javascript,ssl,openssl,ssl-certificate,Javascript,Ssl,Openssl,Ssl Certificate,为了连接到第三方应用程序,我必须让我的用户能够选择他们安装的SSL客户端证书之一,并将其传输给应用程序服务器使用的第三方。(我的web应用程序不需要SSL,需要SSL证书的是第三方) 在我看来,只有在连接到需要SSL的服务时,浏览器本身才可以访问此证书列表。是否可以通过Javascript启动相同的对话框,或者web应用程序是否可以浏览最终用户的SSL存储 如果不可能,我是否可以打开一个文件对话框并将客户端证书作为任何标准文件上载 我必须支持IE9的任何浏览器,我们的应用程序中不允许使用插件 谢

为了连接到第三方应用程序,我必须让我的用户能够选择他们安装的
SSL客户端证书之一
,并将其传输给应用程序服务器使用的第三方。(我的web应用程序不需要SSL,需要SSL证书的是第三方)

在我看来,只有在连接到需要SSL的服务时,浏览器本身才可以访问此证书列表。是否可以通过Javascript启动相同的对话框,或者web应用程序是否可以浏览最终用户的SSL存储

如果不可能,我是否可以打开一个文件对话框并将客户端证书作为任何标准文件上载

我必须支持IE9的任何浏览器,我们的应用程序中不允许使用插件


谢谢。

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

如果不可能,我是否可以打开一个文件对话框并将客户端证书作为任何标准文件上载

首先,SSL/TLS客户端身份验证根本不是这样工作的。这根本不是上传证书的问题。与证书匹配的私钥用于在TLS握手期间对某些内容(在
CertificateVerify
TLS消息中)进行签名。这就是执行身份验证的原因

回到您的主要问题,出于安全原因,SSL/TLS堆栈的处理超出了JavaScript代码的范围。选择客户端证书是其中的一部分

您可能有某种API,允许JavaScript代码访问浏览器的某些加密功能(和)。但是,还需要考虑安全因素

即使证书在某种程度上只包含公共信息,但这并不意味着它是要分发给世界上任何人的公共信息,至少不一定与浏览任何网站的行为相结合

如果您能够从服务器发送的JavaScript代码中列出用户的证书列表,那么您肯定能够通过Ajax调用几乎透明地将该列表发送回您自己。虽然有些人担心被cookies跟踪会对隐私造成影响,但被跟踪的客户证书可能会将此提升到另一个层次(例如,主题DN与
CN=John Smith
和发行人DN与
CN=Department/Ministry of Health/Defense
:这将是一个小小的赠品)

我的web应用程序不需要SSL,它是需要SSL证书的第三方

在这里,您并不是说该第三方是否由用户的浏览器直接访问,或者您是否希望用户将其凭据委托给您与该第三方进行交互(无需用户直接参与)

如果用户可以直接访问该第三方(通过另一个请求),则其浏览器应提示用户输入要使用的证书

如果是关于凭证委派的,那完全是另一个问题,因为您从未向用户提供他们自己的客户端证书的私钥,以便他们能够以自己的名义登录。(例如,从技术上讲,用户可以只向您提供他们的PKCS#12文件,但这样做并不能首先实现这种身份验证)

已经完成了有关使用证书的身份验证委派的工作。本质上,您的EEC(终端实体证书)被用作小型CA,尽管没有CA标志,但远程方将接受它来颁发短期证书。这种机制通常没有很好地集成到浏览器中

另一个更现实的方法是,例如,研究SSO、SAML和Shibboleth的世界。这确实适用于现有浏览器,但总体架构有点不同(因此您需要与第三方讨论)

在浏览器环境中,是否可以获取JavaScript中的SSL证书列表

API允许您发现一些东西,比如共享密钥和派生密钥。但是看看他们的章程和用例,我不清楚他们是否允许枚举和发现证书

我看到过去曾讨论过这个问题,并提出了一个问题。以下是讨论内容:。但是我在报纸上找不到关于第15期的任何东西

另请参见第页的问题。希望会有一个简单的是/否答案

但如果WebCrypto无法提供,也不要感到惊讶。浏览器安全工程师有一种特殊的看待事物的方式,这通常不包括客户端证书。客户端证书可以有效地阻止MitM攻击(例如,请参阅),而浏览器不会优先考虑停止MitM。相反,他们可以处理错误的凭证,如密码;他们选择使用一次性密码(OTP)


在一个比虚构更奇怪的现实中,浏览器甚至会(1)使用,然后(2)破坏一个已知良好的pinset,因为用户被钓鱼了!你不能编造这些东西…

IE上的ActiveX怎么样?我不会那么平淡无奇,你可以在浏览器中用JavaScript做一些不完全是“DOM”的事情。客户端证书只是另一个问题。如何?它具有发现/枚举功能。是的,这是凭证委派的问题。要求是让用户从其客户机证书中选择一个,并将其共享给第三方。那么,客户机证书根本不是解决问题的办法。您可以查看代理证书之类的内容,但无论如何,所有各方都需要努力才能与之集成。(默认情况下,大多数服务器不接受代理证书。)“浏览器不会优先停止MitM”:这是