【问题标题】:javax.crypto.BadPaddingException when connecting to Tibco EMS with SSL使用 SSL 连接到 Tibco EMS 时出现 javax.crypto.BadPaddingException
【发布时间】:2014-08-31 20:26:27
【问题描述】:

这个话题是之前案例的延续: How to setup JMS bridge to ActiveMQ on Weblogic 11g 但现在使用 Tibco 作为源 JMS 桥目标。

尝试从 JMS 网桥配置连接到 Tibco EMS 时出现以下错误:

javax.jms.JMSSecurityException: Error occured while reading identity data: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded
at com.tibco.tibjms.TibjmsSSL._identityFromStore(TibjmsSSL.java:2664)
at com.tibco.tibjms.TibjmsSSL.createIdentity(TibjmsSSL.java:2569)
at com.tibco.tibjms.TibjmsxLinkSSL._initSSL(TibjmsxLinkSSL.java:309)
at com.tibco.tibjms.TibjmsxLinkSSL.connect(TibjmsxLinkSSL.java:390)
at com.tibco.tibjms.TibjmsConnection._create(TibjmsConnection.java:1274)
at com.tibco.tibjms.TibjmsConnection.<init>(TibjmsConnection.java:4100)
at com.tibco.tibjms.TibjmsQueueConnection.<init>(TibjmsQueueConnection.java:36)
at com.tibco.tibjms.TibjmsxCFImpl._createImpl(TibjmsxCFImpl.java:200)
at com.tibco.tibjms.TibjmsxCFImpl._createConnection(TibjmsxCFImpl.java:253)
at com.tibco.tibjms.TibjmsQueueConnectionFactory.createQueueConnection(TibjmsQueueConnectionFactory.java:87)
at weblogic.jms.adapter.JMSBaseConnection.startInternal(JMSBaseConnection.java:364)
at weblogic.jms.adapter.JMSBaseConnection.start(JMSBaseConnection.java:244)
at weblogic.jms.adapter.JMSManagedConnectionFactory.createManagedConnection(JMSManagedConnectionFactory.java:190)

jndi.properties 内容:

com.tibco.tibjms.naming.security_protocol=ssl
com.tibco.tibjms.naming.ssl_enable_verify_host=false
com.tibco.tibjms.naming.ssl_enable_verify_hostname=false
com.tibco.tibjms.naming.ssl_vendor=j2se
com.tibco.tibjms.naming.ssl_expected_hostname=test
com.tibco.tibjms.naming.ssl_identity=/home/oracle/keys/test.p12
com.tibco.tibjms.naming.ssl_password=pass

#DEBUG
com.tibco.tibjms.naming.ssl_trace=true
com.tibco.tibjms.naming.ssl_debug_trace=true

com.tibco.tibjms.debug=true
com.tibco.tibjms.ssl.debug.trace=true
com.tibco.tibjms.ssl.trace=true

编辑: 我已经找到了异常的根本原因:

// sun.security.rsa.RSAPadding.unpadV15()
if (paramArrayOfByte[(i++)] != 0) {
    throw new BadPaddingException("Data must start with zero"); 
}

有什么想法吗?

【问题讨论】:

  • 这看起来就像您有一个用于解密数据的错误密钥文件和/或一个错误密码。
  • 看起来是这样,但根据根本原因(上)你能确定吗?

标签: java ssl jms weblogic tibco


【解决方案1】:

您需要了解连接到 TIBCO EMS 分为 2 个阶段(如果仅使用私有 API,当然可以是 1 个步骤),第一个阶段是创建到 EMS 的 JNDI 连接并查找 connectionfactory 定义,这是当您在 jndi.properties 中设置的属性变得有用。

查找返回后,可以使用检索到的 ConnectionFactory 对象创建实际连接。您面临的问题是在此阶段没有为客户端私钥提供密码。

如果您已阅读文档,EMS 将尝试使用您传递给 ConnectionFactory.createConnection(String userName, String password) 的密码。应该有一个位置/属性文件,您可以在其中设置 ConnectionFactory.createConnection() 在这些托管环境中的密码。

我猜这是避免在托管环境中调用私有 API(例如 com.tibco.tibjms.TibjmsSSL.setPassword(pass))的唯一方法。

【讨论】:

  • 感谢您的澄清。这就是我的假设并现在确认......现在我需要找到在创建连接时强制密码传递的方法。顺便说一句,此时我使用了解决方法,在应用程序启动期间向 tibco api 提供密码
【解决方案2】:

一段时间后,问题已解决。案例是私钥的密码没有提供给 Tibco 客户端。

可以这样做:

com.tibco.tibjms.TibjmsSSL.setPassword(pass)

但仍然不清楚如何在 Mule ESB 连接器或 Weblogic 桥配置等托管环境中解决此问题,在这些环境中您仅使用元数据/配置定义客户端...欢迎任何 cmets。

【讨论】:

    猜你喜欢
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2017-01-07
    • 2013-05-12
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多