【问题标题】:SSL configuration and X509Certificate in java and tomcat 5java和tomcat 5中的SSL配置和X509Certificate
【发布时间】:2026-02-02 13:20:07
【问题描述】:

您好,我在 tomcat 5.5 中配置了 SSL,server.xml 条目如下。

**

<Connector port="6922" maxHttpHeaderSize="8192"
   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100" scheme="https" secure="true"
   keystoreFile="/home/mrsx/cert/keystore.keystore"
   keystorePass="XXXX"
   truststoreFile="/home/mrsx/cert/keystore.keystore"
   truststorePass="XXXXX" clientAuth="true" sslProtocol="TLS" />

**

当客户端试图访问应用程序时,由于请求中的“javax.servlet.request.X509Certificate”参数为NULL,应用程序抛出异常。

我已经创建了一个密钥库并将 CA 证书导入到密钥库中。谁能告诉我为什么我要获取 NULL 证书。我没有在密钥库中导入任何客户端证书。

【问题讨论】:

  • 您真的在尝试设置客户端身份验证吗?如果是这样,我会假设客户端没有通过证书或正在通过空证书。
  • yes... 应用程序检查并验证来自请求参数的证书。我想知道我在这里缺少的任何配置..从本地主机我也得到了同样的异常..我只是从客户端程序调用 url

标签: java linux tomcat ssl tomcat5.5


【解决方案1】:

根据你上面给出的,

SSLEnabled="true"
语句丢失。

如果没有帮助,请尝试在客户端添加 ssl 调试,您应该可以获得更多详细信息。

【讨论】:

  • 我有一个解决方案...谁能确认一下,我必须从服务器密钥库中导出证书并导入到客户端密钥库中,同样的客户端方式,从客户端密钥库中导出客户端证书并导入到服务器密钥库..然后重新启动服务器..最后一步是在客户端程序中提到keystoe和truststre..
  • 你不是说你已经完成了这些任务吗?如果密钥是自签名的,您肯定必须将它们导入您的密钥库。
  • 我之前没有完成这些步骤,所以我没有提到,我有由 CA(comodo) 签名的证书,我有 3 个证书(根证书、中间证书和其他证书),我导入了那些在密钥库中。当客户端尝试访问服务时,应用程序抛出异常(因为 x509certificate 参数为 null),所以我尝试了导出和导入步骤
  • 在我提到的问题中..我将 CA 签名证书导入到密钥库..在上面的评论中..我提到了创建客户端密钥库并从中导出证书并导入服务器信任库跨度>
  • 如果您的证书由公共 CA 签名,您需要确保 1. CA 证书(根 + 中间)在信任库(服务器 + 客户端)上。 4. 如果您打算通过浏览器访问它,浏览器也需要导入这些证书 3. 将签名的证书导入密钥库(一个用于服务器,一个用于客户端)。
【解决方案2】:

正如@Krroae27 所指出的,您启用了两种方式的 SSL/TLS:

clientAuth="true"

仅当您希望客户端使用证书提供凭据时才执行此操作。如果您打算这样做,您通常需要设置一个 Realm 配置,例如 tomcat-users.xml,它将客户端证书映射到本地主体。

【讨论】:

  • 我有一个解决方案...谁能确认一下,我必须从服务器密钥库中导出证书并导入到客户端密钥库中,同样的客户端方式,从客户端密钥库中导出客户端证书并导入到服务器密钥库..然后重新启动服务器..最后一步是在客户端程序中提到keystoe和truststre