栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将Java客户端(JMS)连接到IBM MQ时出现问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将Java客户端(JMS)连接到IBM MQ时出现问题

由于您使用的是9.1.0.0

com.ibm.mq.allclient.jar
,因此不需要与密钥库相关的所有代码,例如:

SSLSocketFactory sslSocketFactory = sslContext().getSocketFactory();//Note that MQEnvironment is used with IBM MQ Classes for Java not IBM MQ Classes for JMSMQEnvironment.sslSocketFactory = sslSocketFactory;MQEnvironment.sslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA";MQEnvironment.sslFipsRequired = false;mqQueueConnectionFactory.setSSLSocketFactory(sslSocketFactory);private SSLContext sslContext() throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException, KeyManagementException {    try (InputStream cert = new FileInputStream("C:\myplace\Dev\Certificates\MY_KEYSTORE.jks")) {        final KeyStore caCertsKeyStore = KeyStore.getInstance("JKS");        caCertsKeyStore.load(cert, "changeit".toCharArray());        final KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());        final TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());        CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");        PKIXRevocationChecker rc = (PKIXRevocationChecker)cpb.getRevocationChecker();        rc.setOptions(EnumSet.of(     PKIXRevocationChecker.Option.PREFER_CRLS,     PKIXRevocationChecker.Option.ONLY_END_ENTITY,     PKIXRevocationChecker.Option.SOFT_FAIL,     PKIXRevocationChecker.Option.NO_FALLBACK));        PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(caCertsKeyStore, new X509CertSelector());        pkixParams.addCertPathChecker(rc);        kmf.init(caCertsKeyStore, "changeit".toCharArray());        tmf.init( new CertPathTrustManagerParameters(pkixParams) );        final SSLContext sslContext = SSLContext.getInstance("TLS");        sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), new SecureRandom());        return sslContext;    } catch (Exception e) {        throw new RuntimeException("Exception creating SSLContext", e);    }}

您可以通过设置以下两个系统属性来代替它,这对Oracle和IBM Java均适用:

System.setProperty("javax.net.ssl.keyStore", "C:\myplace\Dev\Certificates\MY_KEYSTORE.jks");System.setProperty("javax.net.ssl.keyStorePassword", "changeit");

以上设置始终适用于IBM Java,但是对于Oracle Java,这不适用于较旧版本的MQ。在以下版本的IBM MQ中,Oracle
Java已修复该问题(base 9.0和9.1具有相同的修复程序):

Version    Maintenance Levelv7.1       7.1.0.8v7.5       7.5.0.7v8.0       8.0.0.5

IBM Java和Oracle Java具有不同的CipherSuite名称,这些名称记录在IBM MQ v9.1知识中心页面“ 用于JMS的IBM
MQ类中的TLS
CipherSpecs和CipherSuite”中。

您已经

TLS_RSA_WITH_AES_256_CBC_SHA
在发布的代码中指定了,这将是
SSLCIPH
MQ队列管理器
SVRCONN
通道上的值,并将映射到以下CipherSuites:

  • IBM Java:
    SSL_RSA_WITH_AES_256_CBC_SHA
  • Oracle Java:
    TLS_RSA_WITH_AES_256_CBC_SHA

与上述相关,如果您使用的是Oracle Java,则需要设置以下系统属性,以便MQ JMS类将能够使用Oracle CipherSuite名称的正确映射:

System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false");

您提供的错误似乎来自IBM i MQ队列管理器,但是没有提供足够的信息来诊断问题。

该错误指出以下内容:

An unexpected SSL communications error occurred for a channel, as reported in the preceding messages.

您可以编辑问题并提供“先前消息”中的详细信息吗?


你说过

由于某种原因,我的申请正在吊销证书(与CLR相关的问题)

MQ队列管理器可能正在尝试自行连接到客户端证书的AuthorityInfoAccess(AIA)证书扩展名中指定的OCSP服务器。如果MQ无法使用默认配置访问此OCSP服务器,则连接将被拒绝。如果您无法更新网络以允许连接到OCSP服务器,则可以禁用此检查,但是请注意,您将不知道证书是否被吊销。要禁用检查,可以将以下内容添加到队列管理器的

qm.ini
文件
SSL
节中:

SSL:   OCSPAuthentication=Optional   OCSPCheckExtensions=no

最后一个注释,您在示例代码中列出

TLS_RSA_WITH_AES_256_CBC_SHA
的CipherSuite是TLS1.0
CipherSuite。像之前的SSL一样,许多行业通常不推荐使用此协议和TLS1.1。我寻找发布的参考,“ tls
1.0生命终止 ”的google
提供了许多参考。

在下面引用一个“ TLS 1.0寿命终止于2018年6月30日 ”:

截止日期 PCI委员会负责确定何时淘汰较旧的协议。他们最初认为TLS
1.0将于2016年6月30日到期,后来将日期延长至2018年6月30日。最后期限已经过去,所有网络服务器,网络浏览器,网络软件和电子邮件应用程序都必须停止对TLS
1.0的支持,或违反重要的安全更新。

例如,我建议选择在我上面链接到的知识中心页面中列为TLS1.2的一个

TLS_RSA_WITH_AES_256_CBC_SHA256



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号