我对tomcat的双向ssl连接有一些问题,
我需要设置一个使用双向ssl连接的Web服务。 将使用两个不同的证书,一个用于ssl连接,另一个用于soap签名。 规则是,用于soap签名的证书不能用于ssl连接,反之亦然。
客户有三个证书, ssl证书,肥皂证书,以及签署其ssl和soap证书的自己的CA证书。
问题在于ssl连接,当我只将客户端的ssl证书导入tomcat的配置文件中指定的tomcat自定义信任库时,连接引发了ssl错误证书异常。但是当我尝试仅导入CA证书时,tomcat也接受了使用SOAP证书的ssl连接,违反了规则。
让我困惑的是,当我没有指定任何自定义信任库文件时 - 我假设tomcat将使用默认的cacerts文件 - 而不将任何客户端证书导入cacerts文件,tomcat接受连接。这怎么可能?我已经在tomcat的配置上将“clientAuth”设置为“true”。
任何人都可以帮助我吗?
谢谢
答案 0 :(得分:0)
看看这个(http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html#Installing_a_Certificate_from_a_Certificate_Authority)。基本上需要做的是导入您的CA根证书(因为SSL证书由根签名)& SSL证书进入密钥存储区并在tomcat上配置SSL密钥存储区(上面的文档详细介绍了这些步骤)。这应该解决您的SSL问题。
现在,出现SOAP问题,SOAP相关签名本质上是XML签名,Tomcat不会处理相同的问题。这些签名符合此规范(http://www.w3.org/TR/SOAP-dsig/),本质上是一个扩展。 SOAP服务实现,例如Apache CXF处理这些签名(参见:http://cxf.apache.org/docs/ws-security.html)。虽然您可能没有使用CXF,但服务器库实际上将使用您提供的证书进行此签名(此证书的存储是另一回事)。
至于问题的最后部分,检查请求是否是使用SSL进行的,除非配置了证书,否则Tomcat通常不会接受443/8443上的SSL请求。