Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 一个进程如何进行身份验证并与同一主机上的另一个进程安全通信_Authentication_Ssl_Process_Ipc_Rmi - Fatal编程技术网

Authentication 一个进程如何进行身份验证并与同一主机上的另一个进程安全通信

Authentication 一个进程如何进行身份验证并与同一主机上的另一个进程安全通信,authentication,ssl,process,ipc,rmi,Authentication,Ssl,Process,Ipc,Rmi,我试图通过SSL上的JavaRMI实现这一点,但后来我发现SSL证书将提供主机级身份验证,而不是进程级身份验证 此外,我还在配置中存储密钥库的密码;因此,该证书可被另一个攻击者进程使用,并可获得身份验证。用于SSL/TLS的X.509证书可能用于标识主机名以外的其他内容(这通常已用于客户端证书) 在建立与服务器的SSL/TLS连接时,涉及两种类型的验证: 证书验证本身:这将验证证书在使用时是否受信任且有效,通常使用RFC 3280/RFC 5280中所述的PKI 主机名验证:一旦它信任证书是真

我试图通过SSL上的JavaRMI实现这一点,但后来我发现SSL证书将提供主机级身份验证,而不是进程级身份验证


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

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

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

  • 证书验证本身:这将验证证书在使用时是否受信任且有效,通常使用RFC 3280/RFC 5280中所述的PKI
  • 主机名验证:一旦它信任证书是真实的,客户端就会检查它是否是为它所寻找的服务器。这是特定于协议的(例如,RFC 2818,HTTPS的第3.1节),但在RFC 6125中对大多数协议进行了推广。(这类似于检查护照上的图片是否与您面前的姓名匹配,而不是只接受任何有效护照。)
默认情况下,Java的
SSLSocket
s不执行第二步,除非您添加了一些东西来执行。(在Java 7中,一些新的SSL参数允许您在信任管理器中执行此操作,但仅适用于特定协议。)

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


在返回每个方法中的套接字之前,您应该能够在
SSLSocketFactory
中实现自己的身份验证机制,并将该工厂用于RMI应用程序,如本文所述:

如果您需要同一主机中两个进程之间的安全性,那么您将遇到比RMI或SSL解决的问题更大的问题。使用X.509证书似乎是验证每个进程标识的最佳方法,因为我们为每个可以验证的进程分配了不同的名称。唯一的问题是保护密钥存储中的证书。手动提供密钥存储密码将是最好的选择。在编写代码以使用握手CompletedListener时,我怀疑如果使用自签名证书创建密钥存储库并将该密钥存储库用作客户端和服务器端的密钥存储库和信任存储库,会出现什么问题。