Hur*_*ane 9 security https spring-security spring-boot mutual-authentication
我正在单个客户端托管应用程序(CLIENT)和我的spring boot 2应用程序(SERVER)之间实现相互身份验证.我理解步骤如下:
服务器生成密钥库和信任库.该密钥库被用于存储服务器的证书和私钥.该信任存储用于存储(从证书机构(CA)或受信任的客户端证书的证书)其它凭证.
一个企业社会责任是提高了,然后传递给CA的服务器 CA从CSR生成签名证书.这是安装在服务器密钥库中的.
当从客户端到服务器发出https请求时:
所以我有一些事情让我有点困惑......
关于您的第一个问题,是的,您概述的步骤是正确的!以下是带有图形概述的一般mutualSSL流程:(来源)
\n\n\n\n\n\n
\n- 客户端请求访问受保护的资源。
\n- 服务器向客户端提供其证书。
\n- 客户端验证服务器\xe2\x80\x99s 证书。
\n- 如果成功,客户端会将其证书发送到服务器。
\n- 服务器验证 client\xe2\x80\x99s 凭据。
\n- 如果成功,服务器将授予对客户端请求的受保护资源的访问权限。
\n
您的第二个问题(服务器如何验证客户端证书?):\n服务器借助签名来验证客户端证书。签名通常是哈希值,是完整证书的构建。哈希值使用相应(证书颁发机构)的私钥进行签名CA。服务器借助CA公共证书验证客户端证书的签名。
您的第三个问题(服务器信任库包含客户端公钥/证书或相应的 CA 证书?):\n如果您使用例如自签名证书,您可能必须将客户端公钥/证书直接导入到服务器信任库中。如果您的客户端使用CA签名证书,则服务器仅存储CA公钥/证书是合适的,因为它用于验证客户端证书。
你的第四个问题(这个过程是否真正验证了客户端的身份):是的!正如您在第二个问题的答案中看到的,证书是通过检查签名来验证的。签名是完整证书的哈希值。标准X.509包含识别主题的信息。通过检查签名,主体得到验证。标准X.509证书包含以下信息:\n主题名称、主题公钥信息、公钥算法、发行者唯一标识符(可选)、...
您的第五个问题(CN检查在哪里?):(CN通用名)验证是在证书检查时执行的。标识CN当前证书的有效主机名。仅限一项。作为扩展,SAN引入了(主题替代名称)。一份证书可以包含多个SAN. CN(和)条目SAN是证书的一部分,并在证书签名检查的帮助下进行验证。
您的第六个问题(如果客户端证书由于某种原因而受到损害,是否可以通过将其从服务器的信任库中删除来进行管理?):因此,CA使用所谓的revocation lists. 例如,如果您使用自签名证书,也可以从服务器信任库中删除受损的证书条目。
您的第七个问题(在我使用可信 CA(例如 verisign)生成客户端证书而不是自签名证书的情况下,是否有优势?CA ):使用签名证书而不是自签名证书有一些优势。
CACA,例如 VerisignCA都提供创建证书的标准化方法