【发布时间】:2018-03-19 09:47:21
【问题描述】:
我已经为 Tomcat 服务器 (apache-tomcat-9.0.1) 配置了自签名证书。在 server.xml 上添加了所需的配置,并将 .jks 文件复制到 conf 文件夹中。
Create Self Signed Certificate Configure Tomcat with SSL Stuff
HTTPS 按预期在浏览器上运行。
在调用 HttpsURLConnection 以获取 REST API 时禁用 SSL 验证
Certificate Exception Stuff Disable Certificate Exception
有效! -
在 Server.xml 上 -= 仅配置了 8443 端口。 关于配置的 Web 应用程序安全约束:
<security-constraint>
<web-resource-collection>
<web-resource-name>OVS</web-resource-name>
<!-- all URLs are protected -->
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<!-- redirect all requests to HTTPS -->
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Tomcat 服务器启动时在任何地方都没有显示任何异常。
但是在使用自签名证书时,Tomcat 服务器没有发生 SSL/TLS 通信?。 Wireshark 捕获了数据包,预计会看到 TLS 数据包或 SSL 握手,但什么也没有,只有 TCP 数据包。
为什么没有发生 SSL 握手?,就像因为它只验证 SSL 服务器证书? (因为客户端身份验证是假的)
<Connector SSLEnabled="true" acceptCount="100" clientAuth="false"
disableUploadTimeout="true" enableLookups="false" maxThreads="150"
port="8443" keyAlias="london" keystoreFile="conf/londonkey.jks" keystorePass="sumit123"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
您有没有在配置自签名证书等内容后进行测试以查看 SSL/TLS 通信是否发生?
编辑
据我所知,要在两个网络实体 A 和 B 之间进行 SSL 通信,两者都必须有自己的私钥和公共证书,但在上面我们只配置了带有证书和私钥的服务器,没有客户端的东西?,请指正?
我检查了各种 example : posts ,但都在谈论生成密钥并仅配置 Tomcat 服务器。对于测试,它像浏览器一样说话会显示证书异常,接受该异常并设置所有内容,否我在哪里找到关于我们实际配置 Tomcat 服务器的实际 TLS/SSL 握手的讨论。
【问题讨论】:
-
当建立 SSL 通信链接时,会验证双方证书(如果存在)。这意味着如果存在客户端证书,则服务器检查它是否有效,因此,如果服务器证书存在,客户端会尝试验证服务器的证书之一。服务器自签名证书在大多数情况下都无效。因此,除非您使用 -k 选项接受它,否则尝试对 SSL 自签名域进行原始 curl 会直接被拒绝。与浏览器、c# 或 java 客户端相同,您必须将服务器 SSL 证书验证委托给“始终正常”的过程。
-
但是从同一个 java 客户端(实际上调用 HttpsURLConnection con = (HttpsURLConnection)url.openConnection(); 当我访问任何其他非自签名的 URL 时(确保没有安装客户端的证书/密钥)- 在这种情况下发生 SSL/TLS 通信,我可以在 Wireshark 和 SSL 握手的东西上看到 TLS 数据包。
-
可以发生握手,但如果服务器证书是自签名的,则会被拒绝。在 Java 中,您可以使用接受任何类型证书 (nakov.com/blog/2009/07/16/…) 的委托来避免对此进行验证。在 php 中,这是完成的,例如在 SOAP 客户端中,使用 stackoverflow.com/questions/8443618/…;在 C# 中,使用 stackoverflow.com/questions/2675133/…。
标签: java rest tomcat https ssl-certificate