基于证书和IP的身份验证

问题描述:

有没有一种方法可以让java web应用通过http请求获取安装在计算机上的安全证书的信息,并在机器上安装特定证书时有选择性地授予访问权限。基于证书和IP的身份验证

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

(这些可以赢得笔记本电脑与安装在自己的机器上一定的荣誉证书,也可以是由一组特定的静态IP地址的)。

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

正确的配置已经完成后,客户端证书(S)是通过servlet请求属性是由/可用于网络应用程序:

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

正如jambjo说 - 你绝对可以让客户端证书通过HTTPS进行客户端身份验证,如他所述。我建议通过静态IP,证书很难欺骗,如果您将来需要以不同方式重新配置网络,则允许更灵活。

一对夫妇其他的想法:

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

感谢您的详细信息lakshmi。遵循你所说的话,我想在我的本地创建一个poc。我有tomcat和glassfish(与netbeans)。现在看来我需要很多进一步的信息才能在这方面取得进展! a)如何为我的测试目的创建证书。 b)如何在我的个人笔记本电脑上安装该软件。 c)我不认为我上面提到的服务器支持HTTPS,所以任何已知的开源解决方案呢? d)此外,我将不得不找出如何将证书添加到服务器,最终终止这个poc。 (稍后我会保留这个问题) – frappuccino 2009-12-26 15:30:19

+0

让我们看看... a)OpenSSL是一个让您创建自签名证书的工具。你也可以用它做一个测试CA. b)你需要生成一个密钥对的证书。我知道Open SLL将允许PKCS12格式。从那里,大多数浏览器都有一个证书上传过程。 c)tomcat绝对不会HTTPS,http://tomcat.apache.org/tomcat-4.0-doc/ssl-howto.html。如果Glassfish没有这样做,我会感到惊讶。当您启动服务器时,您需要设置“客户端身份验证”。 d)服务器需要CA证书而不是最终实体。通常是一个固定而忘记的操作。 – bethlakshmi 2009-12-28 21:42:40