ssl - 签发自签名证书

标签 ssl https axis

我现在正尝试通过 https 访问 Web 服务,为了实现这一点,我已经完成了以下操作。

我使用以下命令生成自签名证书并放置在/conf 目录中。

keytool -genkey -alias localhost -keyalg RSA -validity 365 –keystore server.keystore –storetype JKS
keytool -export -alias localhost –keystore server.keystore -rfc -file public.cert
keytool -import -alias localhost -file public.cert –storetype JKS -keystore server.truststore 

下面是 server.xml 条目

<Connector className="org.apache.catalina.connector.http.HttpConnector"
               port="8443" minProcessors="5" maxProcessors="75"
               enableLookups="true"
           acceptCount="10" debug="0" scheme="https" secure="true">
      <Factory className="org.apache.catalina.net.SSLServerSocketFactory"
               keystoreFile="conf/server.keystore"
               keystorePass="changeit"
               truststoreFile="conf/server.truststore"
           truststoreType="JKS" truststorePass="changeit"
               clientAuth="false" protocol="TLS"/>
</Connector>

现在我面临以下错误。

{http://xml.apache.org/axis/}stackTrace: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found

但是,如果我在访问 web 服务的类文件中添加以下代码,则不会抛出错误。

AxisProperties.setProperty("axis.socketSecureFactory","org.apache.axis.components.net.SunFakeTrustSocketFactory");

你能指导我解决这个问题吗?

最佳答案

TLS 正在两个方面建立:服务器和客户端。每一方都必须将自己的 key 对保存到 keystore 中。我们称它们为 serverKeystore.jksclientKeystore.jks 然后将创建仅包含公钥的附加 keystore 。这个称为信任库,用于 key 身份验证。让我们按照相同的方案将它们保存到 serverTruststore.jksclientTruststore.jks 中。

以一种方式仅对 TLS 服务器 key 进行身份验证。

  • 服务器必须只有 serverKeystore.jksConnector 中提供。
  • 客户端必须配置了 clientKeystore.jksserverTruststore.jks

通过两种方式 TLS 对服务器和客户端 key 进行身份验证。

  • 服务器必须在 Connector 中提供 serverKeystore.jksclientTruststore.jks
  • 客户端必须配置了 clientKeystore.jksserverTruststore.jks

客户端通过指定 Java 环境变量来注册 key 存储

-Djavax.net.ssl.keyStore="path\\to\\server.keystore"

在命令启动 JVM 的参数中,或以编程方式在代码中使用

System.setProperty("javax.net.ssl.keyStore", "path\\to\\server.keystore");

从技术上讲,可以像您一样在客户端和服务器端使用相同的 key 对。但这会危及私钥,因为它不再是 secret 。

关于ssl - 签发自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23541130/

相关文章:

java - WS 发送生成的 xml 中的 multiRef

excel - 加密excel-vba ADODB连接

mongodb atlas 与 ssl 的连接问题

ssl - Cipher 用于浏览器使用的请求数据加密

azure - 当我想要购买 SSL 证书时,SSL 和 TLS 服务器证书之间有什么区别吗?

java - 如何在axis生成的客户端中实现线程以使用java向web服务发出多个请求

asp.net - .NET 中的客户端证书

java - 使用 Android 和外部证书进行 SSL 身份验证

forms - 离开并返回HTTPS页面时如何保持更改的表单内容? (适用于HTTP)

ssl - 如何强制 Axis 客户端使用 TLSv1.2 协议(protocol)