0

我试图通过 SSL 使用 Java RMI 来做到这一点,但后来我发现 SSL 证书将提供主机级别的身份验证,而不是进程级别的身份验证。

另外,我将密钥库的密码存储在配置中;因此证书可以被另一个攻击者进程使用,并且可以通过身份验证。

4

1 回答 1

1

用于 SSL/TLS 的 X.509 证书可能用于识别主机名以外的其他内容(这通常已用于客户端证书)。

与服务器建立 SSL/TLS 连接时涉及两种类型的验证:

  • 证书验证本身:这将验证证书在使用时是否受信任且对所需目的有效,通常使用 RFC 3280/RFC 5280 中描述的 PKI。
  • 主机名验证:一旦它相信证书是真实的,客户端就会检查它是否适用于它正在寻找的服务器。这是特定于协议的(例如 RFC 2818,HTTPS 的第 3.1 节),但在 RFC 6125 中已针对大多数协议进行了概括。(这类似于检查护照上的图片是否与您面前的姓名匹配,而不仅仅是接受任何有效护照。)

默认情况下,JavaSSLSocket不会执行第二步,除非您添加一些内容来执行此操作。(在 Java 7 中,一些新的 SSL 参数允许您在信任管理器中这样做,但仅限于特定协议。)

您需要找到一种方法来定义您希望如何识别您的其他应用程序和进程,使用主机名以外的其他内容,使用这些命名约定颁发证书,并让您的客户端应用程序检查这一点。

您应该能够在一个中实现您自己的身份验证机制SSLSocketFactory,在每个方法中返回套接字之前,将该工厂用于您的 RMI 应用程序,如下所述:https ://blogs.oracle.com/lmalventosa/entry/using_the_ssl_tls_based1

于 2012-09-24T10:33:23.117 回答