我已经与运行REST api的servlet实现了HTTPS连接。 设备可以使用HTTPS连接到服务器。 设备正在接受服务器的证书并建立HTTPS。
如何确保设备仅接受特定证书?目的是有人不应该使用自签名证书设置一个虚假服务器,将自己标识为正确的服务器。
在浏览器环境中,用户会在网址中看到Chrome的划掉的https,并且知道证书未经过验证。如何确保应用程序。
答案 0 :(得分:1)
该程序称为证书验证,非常标准。某些类和组件为您执行验证,其他类和组件则用于手动实现和控制。
验证确保(在理想情况下)您正在连接到合法服务器,即主机名和显示的证书中的名称匹配的服务器。这要求服务器已获取所需主机名的有效CA签名(我们省略了缺乏安全性和灵活性的自签名变体)证书。到现在为止还挺好。
现在,您可以依靠预先实现的证书验证或实现自己的证书验证,也可以将自己的检查添加到预先实现的验证过程中。实现自己的验证对于您的任务来说太麻烦了,所以让我们假设您使用的客户端代码已经执行了一些验证(您没有指定用于连接的确切代码,因此我无法对其进行评论)。您可以依赖它,但然而在某些国家/地区的州政府机构会对流量产生影响,为此,他们会获得(或在某些情况下即时生成)证书,这些证书本质上是假的,但如果我们有效则盲目地遵循验证程序。
因此,如果您同时控制服务器和客户端,并且您还可以实现其他验证(您的客户端组件或类允许您这样做),那么您的额外检查可以是比较证书的颁发者(或整个证书链) )对您知道有效的发行人。这不太灵活,并且在某种程度上违反了PKI规则,但是这种方法显着降低了伪证书生成和接受为有效的机会。我们的想法是,您知道您使用的证书以及您使用的CA(以及将来可能使用的CA),因此您可以将此信息存储在客户端中并在验证期间进行比较。
您可以通过在SO上搜索“证书验证”来阅读有关证书验证的更多信息 - 这是一个非常受欢迎的主题。