基于证书和IP的身份验证

时间:2009-12-22 16:46:07

标签: java certificate ip-address http-authentication

java web应用程序是否有办法通过http请求获取有关安装在计算机上的安全证书的信息,并在计算机上安装特定证书时有选择地授予访问权限。

基本上要求是,Web应用程序应该只接受来自公司笔记本电脑的请求,否则必须使用适当的错误文本拒绝访问。

(这些可能是胜利的笔记本电脑,其机器上安装了某些证书,或者它们可以来自某组静态ips。)

2 个答案:

答案 0 :(得分:2)

是的,这可以使用HTTPS客户端证书。确切的设置和配置取决于您的应用程序服务器和特定要求,但常见的情况是您创建公司内部CA(证书颁发机构)以颁发可能限于特定客户端IP地址的客户端证书并配置您的应用程序服务器HTTPS连接器,要求客户端证书并信任由您自己的CA颁发的证书。

完成正确的配置后,客户端证书将通过servlet请求属性提供给Web应用程序:

X509Certificate[] certificates = (X509Certificate[])
    request.getAttribute("javax.servlet.request.X509Certificate");

答案 1 :(得分:0)

正如jambjo所说 - 你可以通过HTTPS获得客户端证书,如他所描述的那样。我建议通过静态IP,证书更难以欺骗,并且如果您将来需要以不同方式重新配置网络,则允许更灵活。

其他一些想法:

  • 几乎所有应用程序服务器都允许您设置受信任的证书存储区 - 您的应用程序将接受HTTPS客户端身份验证的CA证书列表。将此限制为提供客户端证书的CA - 内部公司CA或证书提供者。
  • 内部CA或CA提供商的选择是公司的。内部CA将需要人力来设置和维护,CA提供商将为您支付每个证书的费用。有一个权衡点,自己制作证书会更便宜,但在你达到这一点之前,CA提供商可能会更便宜。
  • 如果您有内部CA,并且您的规则是“任何公司计算机(带有证书)都可以访问此应用程序”,那么您的工作将在应用程序服务器中的可信CA列表中完成,因为您知道公司CA不会被公司里的任何人使用。
  • 如果您有CA提供商,则可能需要进一步限制访问控制,并使用提供的代码jambjo来获取证书并查看其中的信息。通常,主题DN(专有名称)中有组织(O)和组织单位(OU)组件,它将告诉您组织生成此证书的组织。您应该能够检查以确保您拥有公司计算机。
  • 如果您知道您的CA提供商永远不会向除您公司成员之外的任何人提供您公司的O和OU名称,那么进行O和OU检查是可行的。如果不是这种情况,您可能需要检查后端数据存储(如LDAP目录)以确保您知道用户或用户的计算机。
  • 还可以将机器的IP地址链接到证书 - 通常在构造证书时使用SubjectAltName(使用者替代名称)。我不推荐它,因为如果您更改了机器的IP地址,则需要一个新的证书。对于您的目的,这似乎不必要地复杂。