我有一个Java服务器应用程序,我能够使用自签名证书和密钥对与它的客户端通信。这是在我的开发机器上完成的。
现在,是在一个活动服务器上启动应用程序的时候了,我已经从一个权威机构(LE)获得了SSL证书。
我可以导出签名的证书,并将其导入到为我的Android客户端提供的安全城堡密钥库中。然而,有一件事让我思考。如果证书过期,这意味着每次都必须更新应用程序。我不想这样做,我觉得工作太多了。
我读了这个页面,他们提到( SSL的密钥,条目号3),只要拥有CA证书就足以建立连接。
可以选择导出私钥的公钥证书,并将其分发给将与您交互的SSL各方。(请参阅“从密钥库导出公钥证书”一节)如果您使用的是来自证书颁发机构的证书,那么其他人只拥有证书颁发机构本身的证书就足够了。
我想知道这有多安全,有什么影响(如果有的话)。
这样做的目的是避免每次更新证书时重新编译客户端应用程序。
谢谢。
发布于 2019-07-10 22:20:25
据我所知,只有您的客户端正在验证您的服务器,而不是相反。这是一种身份验证,因为只有一方在认证另一方。我可能错了,你们可能在做相互认证,但我们会讨论的。首先,让我们考虑一下更简单的情况。
为了让客户端对您的服务器进行身份验证,服务器需要一个带有私钥的SSL证书,而您似乎拥有该证书。此证书由CA证书签名,该证书可能是由根证书签名的。为了使客户端信任您的服务器,它需要一个CA证书列表,客户端信任这些证书来签署ssl证书。此证书列表是您的信任存储区。您的信任存储应该具有受信任CA的根和CA证书。
如果服务器的SSL证书过期,则需要为服务器获得新的证书。如果您的新证书是由签署旧证书的同一CA签名的,则客户端将继续信任您的服务器而不进行任何更新。但是,如果您的新证书由客户端未知的CA签名(即CA证书不在信任存储区中),则需要使用新证书的CA和根证书更新客户端的信任存储。
这描述了单向身份验证。但是,如果应用程序需要相互身份验证,除了客户端对服务器进行身份验证外,您的服务器还需要对客户端进行身份验证。这个过程完全相同,但正好相反。客户端还需要ssl证书,服务器还需要具有签名客户端证书的根/CA证书的信任存储。适用的规则与服务器验证客户端时相同。因此,如果客户端的ssl证书过期,并且服务器的信任存储区不知道新证书,则必须用新CA的证书更新信任存储。
绕过手动更新信任存储的一种方法是使用您信任的CA自动获得新的信任存储。这就是你的浏览器所做的。但是,如果需要新的证书,则仍然需要更新应用程序。
https://stackoverflow.com/questions/56978947
复制相似问题