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

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

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

有帮助吗?

解决方案

是,这是可能的使用HTTPS客户端证书。确切的安装和配置取决于您的应用程序服务器和具体要求,但常见的场景竟被是您创建一个公司内部CA(认证机构)发出可能被限制到特定的客户端IP地址的客户端证书和配置应用程序服务器HTTPS连接器需要一个客户端证书,并为信任自己的CA颁发的证书。

适当的配置已完成后,客户端证书(或多个)/经由servlet请求属性提供给所述web应用:

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

其他提示

正如 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 地址,您将需要一个新的证书。对于您的目的来说,这似乎不必要地复杂。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top