本主题是先前情况的延续:如何在Weblogic 11g上设置到ActiveMQ的JMS桥,但是现在使用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");
}
有任何想法吗?
您需要了解,连接到TIBCO EMS分为两个阶段(如果仅使用私有API,则可以分为1个步骤),第一个阶段是创建与EMS的JNDI连接并查找connectionfactory定义,这是当您将属性在jndi.properties中设置将变得有用。
查找返回后,可以使用检索到的ConnectionFactory对象创建实际的连接。您面临的问题是在此阶段没有为客户端私钥提供密码。
如果您已阅读文档,EMS将尝试使用您传递给ConnectionFactory.createConnection(String userName,String password)的密码。应该有一个地方/属性文件,您可以在其中设置那些托管环境中ConnectionFactory.createConnection()的密码。
而且我猜想这是避免在托管环境中调用私有API(例如com.tibco.tibjms.TibjmsSSL.setPassword(pass))的唯一方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句