java 验证客户端证书_用于身份验证的Apache客户端证书
我想通过API使用PHP / MySQL通过两个身份验证因素公开服务 . 一个因素是简单的用户名和密码 . 对于另一个因素,我试图使用相互TLS,其中客户端证书与用户名匹配 . 我打算使用来自我在使用Apache的CentOS机器上设置的CA的自签名证书,并通过安全通道和私钥向客户颁发客户端证书 .
我找到了一些关于如何使用SSL证书设置用户身份验证的体面文章 . 我到目前为止找到的最好的是下面 .
但是,在向我解释某些内容方面似乎存在漏洞 . 我设想这个工作原理是当客户端发出POST请求时,连同用户名和密码,还包括一个带有由发给用户的私钥签名的数字签名的证书 . 然后,可以通过公钥解密该签名,以确认私钥的所有者发送了该消息 . 但是,这些文章实际上并没有证实这就是正在发生的事情 .
相反,他们说Apache确认证书是由CA Cert签署的 . 他们还解释了如何使用PHP访问证书中的字段,例如SSL_CLIENT_S_DN_Email和SSL_CLIENT_M_SERIAL,并使用它们来确认证书属于邮件的发件人 . 但是,我不清楚他们不只是在公共证书中使用信息 . 因此,任何可以访问公共证书的人都可以将其作为身份验证的一个因素来对服务进行身份验证 . 如果是这样,这意味着它不是真正的身份验证因素 .
我错误地想到我希望的情况 - 消息中包含的证书确实包含由发给用户的私钥签名的签名,并且Apache使用公钥解密签名而不是仅仅确认证书已颁发由CA?