如何通过HTTP请求获得用户X.509证书 - (不使用SSL)

时间:2012-08-24 11:39:32

标签: java authentication x509

我们希望在LDAP中使用X.509证书和组对用户进行身份验证/授权。

使用Tomcat 5.5,我们可以通过SSL获取X.509证书,然后切换回http并继续在请求中使用userPrincipal来实现此目的。转到Tomcat 6和7后,切换回http。

后,userPrincipal不再可用

在这个问题Can I use SSL certificate without using a HTTPS connection?据说你可以在没有SSL的情况下申请X.509证书。我正在努力确认是否​​可能,以及是否有人知道如何做到这一点。

1 个答案:

答案 0 :(得分:3)

让我们暂时考虑一下。

用户身份验证通常如下:

  1. 要求客户证明自己的身份
  2. 收到用户身份证明
  3. 传回一个唯一的随机字符串,客户可以使用该字符串在未来证明自己的身份(会话令牌)。
  4. 认证后回到未加密的HTTP是一个坏主意。每个人都可以在线上看到会话令牌。他们可以窃取它并用它来构成用户。有关示例,请参阅FBController或搜索“会话劫持”。

    使用未加密的会话来传递用户身份证明同样是个坏主意。每个人都可以重播这个并以用户身份出现。无论您使用的是X.509证书还是用户名/密码:都是一样的。

    如果您真的想要,可以使用Javascript实现自己的伪HTTPS。例如,雅虎在通过网络发送之前使用JavaScript来获取用户密码的盐渍SHA1。您可以使用Javascript使用X.509的私钥对nonce进行签名,并通过公共证书发送。 请注意,在使用此方法时,您仍然对会话劫持持开放态度,因此这只是一种虚假的安全感!

    更好的方法是使用标准HTTPS。完整连接是加密的,这意味着通过用户证明,会话劫持甚至查看用户请求的信息都没有机密性问题。