gpt4 book ai didi

java - Jetty客户端/服务器相互认证

转载 作者:行者123 更新时间:2023-12-04 22:39:25 25 4
gpt4 key购买 nike

我正在尝试构建具有以下一般要求的客户端/服务器 servlet 应用程序:

  • 客户端和服务器都嵌入了 jetty ;
  • 服务器公开一个 servlet 以便通过 POST 接收 json 数据;
  • 连接必须通过 SSL 保护(即连接将通过互联网通过 https 完成);
  • 我想要 仅限 我的 Jetty 客户端能够向我的服务器发送数据,所有其他暂定必须被服务器拒绝;
  • 服务器和客户端是无人值守的机器(即无法通过命令行输入密码);
  • 没有明文密码必须存储在客户端设备上。一般来说,我不希望有人可以打开远程客户端设备并窃取密码并构建一个能够向我的服务器发送数据的假远程设备。

  • 我已经通过 HTTP 构建了一个完美运行的客户端/服务器应用程序但我对安全性感到困惑。
    我已经读到有可能使用客户端/服务器相互身份验证,这似乎是我正在寻找的,但我无法获得完整的画面。
    在本文档中 client-certificate-authentication关于如何构建共享可信 CA 或多或少有清晰的解释,但访问 TrustStore 的密码和 KeyStore在代码中很清楚。
    我想我在拼图中错过了一 block 瓷砖。
    有人能指出我正确的方向吗?
    谢谢,
    S。

    最佳答案

    我要一个简单的答案(现在)。
    如果您只想让您的客户端与服务器通信,那么是的,客户端 SSL/TLS 证书是可行的方法。
    您需要服务器的 SslContextFactory.Server.setNeedClientAuth(true)设置为真。这反过来会导致 Java 的 javax.net.ssl.SSLParameters.setNeedClientAuth(true)在传入连接建立时设置。如果客户端未能提供客户端证书,则连接将关闭,并且不会发送或处理任何 HTTP 请求。
    至于保护客户端证书,这取决于你,你可以做任何你想做的事情,只要它产生一个有效的客户端 SslContextFactory.Client Jetty 客户端可以访问。这包括 ...

  • 使用明文密码
  • 使用 obfuscated passwords (最少的努力,最少的安全)
  • 客户端中其他地方的加密 keystore /信任库密码,在最后一分钟提供给 SslContextFactory.Client。 (适度的安全性,不会那么难弄清楚)
  • 创建 java.security.KeyStore反对自己并将其交给SslContextFactory.Client.setKeyStore(KeyStore)SslContextFactory.Client.setTrustStore(KeyStore)启动 Jetty 客户端之前的方法。 (更好的安全性,代表你做更多的工作)

  • 您可能想要考虑让客户端证书是短期的(24 小时?)从服务器动态刷新,并且如果您遇到滥用,客户端证书是可撤销的(在服务器/CA 端)。 (例如来自多个不同客户端 IP 的相同客户端证书)

    关于java - Jetty客户端/服务器相互认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63509202/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com