0

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

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

(这些可能是计算机上安装了某些证书的 win 笔记本电脑,也可能来自一组特定的静态 ip。)

4

2 回答 2

2

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

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

X509Certificate[] certificates = (X509Certificate[])
    request.getAttribute("javax.servlet.request.X509Certificate");
于 2009-12-22T17:04:55.357 回答
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 地址,您将需要一个新证书。就您的目的而言,它似乎不必要地复杂。
于 2009-12-24T15:02:27.933 回答