Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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 自签名证书--帮助用户知道他们需要将根CA添加到可信证书存储_Javascript_Browser_Certificate_Ssl Certificate_Self Signed - Fatal编程技术网

Javascript 自签名证书--帮助用户知道他们需要将根CA添加到可信证书存储

Javascript 自签名证书--帮助用户知道他们需要将根CA添加到可信证书存储,javascript,browser,certificate,ssl-certificate,self-signed,Javascript,Browser,Certificate,Ssl Certificate,Self Signed,我有一个使用嵌入式Web服务器的桌面产品,它将使用自签名证书 我是否可以在网页中添加一些东西,检测到他们没有将根CA添加到他们的受信任列表中,并显示一个链接或DIV或指导他们如何操作的东西 我想可能是一个有安装CA指令的DIV,一个运行测试的Javascript(尝试在没有内部警告的情况下访问某个东西),如果测试成功,则隐藏DIV。或者类似的事情 来自卓越SO社区的任何想法?:) 假设您了解C#,并且希望安装pfx文件。请创建一个将从url运行的exe 我唯一的想法就是使用框架和一些java

我有一个使用嵌入式Web服务器的桌面产品,它将使用自签名证书

我是否可以在网页中添加一些东西,检测到他们没有将根CA添加到他们的受信任列表中,并显示一个链接或DIV或指导他们如何操作的东西

我想可能是一个有安装CA指令的DIV,一个运行测试的Javascript(尝试在没有内部警告的情况下访问某个东西),如果测试成功,则隐藏DIV。或者类似的事情

来自卓越SO社区的任何想法?:)

假设您了解C#,并且希望安装pfx文件。请创建一个将从url运行的exe


    • 我唯一的想法就是使用框架和一些javascript

      框架的第一个元素将充当看门狗,等待x个时间量(javascript setTimeout),然后向用户显示自定义ssl失败消息,并提供下载自签名证书的超链接或说明

      第二个帧元素尝试https连接,如果成功,则重置看门狗帧,使其永远不会触发。如果失败(假设https证书验证失败),则会触发看门狗消息并显示给用户

      根据您的浏览器,您很可能仍然会看到该方法的一些安全警告,但您至少能够推送自己的内容,而不需要用户运行不受信任的代码,并且没有适当的信任链(与接受证书验证错误和建立不受信任的ssl会话相比,安全POV的情况要糟糕得多)

      可以使用其他测试方法(如XMLHttpRequest等)对概念进行改进。

      您可以尝试在每个用户会话中添加一些(隐藏的)Flex元素或Java小程序。 它将只下载服务器的任何https页面,并将获得有关连接的所有信息:

      com.sun.deploy.security.CertificateHostnameVerifier.verify()
      or
      javax.security.cert.X509Certificate.checkValidity()
      

      我认为Flex(对用户来说更常见)从用户的角度来看,应该有类似的验证https证书的方法。它还应该共享操作系统的受信任证书存储,而Java可能有自己的证书存储。

      为什么要这样做?培训用户不分青红皂白地安装根CA证书是一个坏主意,因为网站告诉他们这样做。你正在破坏整个系统n信任。有安全意识的用户会忽略您安装证书的建议,并可能认为您没有认真对待安全问题,因为您没有从现有CA获取证书


      您真的需要HTTPS吗?如果需要,您可能应该咬紧牙关,与CA达成协议,以便为您的客户提供正确的CA签名服务器证书。如果web服务器仅用于桌面应用程序的本地连接,则您应该将自签名证书作为installat的一部分添加到受信任列表中您不应该这样做。根证书不是您刚刚安装的,因为添加根证书可能会破坏https提供给您的任何安全性


      但是,如果您正在制作一个桌面应用程序,那么只需收听127.0.0.1。这样,流量就不会离开用户计算机,也没有攻击者可以收听。

      因为服务器在客户端计算机上运行(桌面产品)它不能使用winapi/os功能检查受支持的浏览器是否安装了证书吗?我知道Firefox在用户配置文件目录中有一个证书数据库,IE可能会在注册表中保留信息。这对所有浏览器来说都不可靠,但如果服务器只是在“找到证书”和“找到证书”之间进行选择“请确保在继续之前已安装证书”,则不会造成任何伤害,因为用户可以选择任何一种方式继续


      您还可以通过提供一个嵌入式浏览器(即gecko)来简化问题,这样您只需要处理一个浏览器,这简化了很多事情(包括预安装根CA)

      我想证书在这里有几个问题,一个是用于访问桌面的主机名必须与证书匹配。在这种情况下,您别无选择,只能在客户端上生成证书。您需要允许用户以某种方式指定主机名,以防从客户端检测不到外部用户使用的名称我是主持人

      我还建议允许管理员为那些不想依赖自签名证书的人安装可信证书。这样,您还可以将可信证书维护的成本转移给真正需要的管理员

      最后,根据我的经验,浏览器允许或拒绝自签名证书,服务器无法知道证书是否被拒绝、临时接受或永久接受。我认为一定有某种机制可以处理SSL故障,但典型的web编程不在该层运行。在任何情况下,唯一的如果SSL失败,Web服务器可以做的事情是回退到非SSL,并且您在评论中指出您不能使用任何非SSL。我认为您应该尝试取消该限制;在这种情况下,非SSL起始页将非常有用:它可以测试(使用帧或图像、JSON或AJAX)https连接,它可以链接到有关如何设置证书的文档,或者在何处下载证书的安装程序

      如果浏览器由于自签名证书而无法连接,并且您根本不允许使用纯HTTP,那么您可以通过什么其他方式与用户通信?没有其他通道,您无法建立通道,因为您没有任何通信

      您在为inst编写win32应用程序的评论中提到