Java 如何为使用openssl启动的ssl服务器单独维护trutstore。。?

Java 如何为使用openssl启动的ssl服务器单独维护trutstore。。?,java,ssl,openssl,Java,Ssl,Openssl,假设我希望使用具有以下证书的ssl服务器运行 cacert, 子目录, 服务器证书 为此,如果我使用openssl s_服务器启动ssl服务器,通过提供选项Cert-(server Cert)CAcert-(sub-CAcert,CAcert)来在客户端连接时显示整个链 我的问题是 将分cacert,cacert自动被视为我的服务器受信任 我的意思是,如果客户端发送链状(客户端证书,子cacert,cacert),客户端的证书验证结果是否会成功 如果是这样的话,我如何避免这种情况。。??我想使用

假设我希望使用具有以下证书的ssl服务器运行

cacert,
子目录,

服务器证书

为此,如果我使用openssl s_服务器启动ssl服务器,通过提供选项Cert-(server Cert)CAcert-(sub-CAcert,CAcert)来在客户端连接时显示整个链

我的问题是

分cacert,cacert自动被视为我的服务器受信任

我的意思是,如果客户端发送链状(客户端证书,子cacert,cacert),客户端的证书验证结果是否会成功

如果是这样的话,我如何避免这种情况。。??我想使用类似于java中的openssl来维护单独的信任库

(根据我在java中的理解,客户端接收驻留在密钥库中的证书链,但服务器在验证期间不使用这些证书,而仅使用truststore进行验证)

我的假设有错吗


提前感谢:-)

这取决于您用于SSL的应用程序(Tomcat、WebLogic、Custom等)

但通常,如果您向客户端提供服务器证书和完整的证书链,并且客户端信任该链中的根证书,则客户端将信任服务器证书


这同样也适用于其他方式(客户端到服务器)。

是的,子cacert和cacert将被信任

我现在还没有可以立即访问openssl来测试这一点,但是您是否尝试过手动构建证书链

确保服务器标识证书采用PEM格式,然后按以下顺序将其复制到单个文件中:

cert
sub-cacert
cacert
(我假设sub-cacert是中间值,cacert是根)

或者更一般地说

server identity certificate
intermediate certificates
root certificate authority
其中,链中的每个证书都必须由其正下方的证书颁发,并且您可以拥有多个中间证书

尝试将此连接的文件用作服务器证书,并仅将客户端证书信任的证书颁发机构放置在CAfile/CApath中


我没有使用openssl s_server的经验,但我知道有几个应用程序使用openssl进行证书操作,允许您这样做。

您的意思是它只将根证书作为受信任的..?而忽略子证书。。?目前我正在使用openssl,如果我提供cafile,那么客户端可以从服务器获取链,这对我来说是理想的情况,但在openssl中,cafile被视为可信证书,需要丢弃。我确实想让他们信任我的服务如果你使用-CAfile选项,它将使用它将证书链发送到客户端,它还将使用它作为信任链来验证客户端的证书。我不想在我的服务器中受信任..我需要在CA中保留cacert和SUBA的原因是将该链传递给客户端。。是否有任何方法可以将链传递给客户端而不是将它们放入CA中……?可能可以使用您不想信任的证书手动构建链,正如我所说的,从而将它们排除在您的CA文件/路径之外。试试看!