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