Sử dụng SSL từ Oracle JVM (JSSE)
Xem thêm "What TLS cipherspecs/ciphersuites are supported when connecting from Oracle Java (non-IBM JRE) to MQ queue manager?"
Trong MQ phiên bản khách hàng 8.0.0.2 có một bản vá được bao gồm để sử dụng TLS với Oracle JVM, điều này làm việc với lanes câu trả lời ở trên
Địa lý t này để làm việc, bạn sẽ cần Client MQ mới nhất có chứa IV66840: WMQ V7 JAVA/JMS: ADD HỖ TRỢ CHO CHỌN TLS CIPHERSPECS KHI CHẠY TRÊN KHÔNG IBM Java Runtime Environment
http://www-01.ibm.com/support/docview.wss?uid=swg1IV66840
(download)
tùy thuộc vào vị trí của bạn, bạn cũng có thể cần phải cài đặt Java Cryptography Extension (JCE) Chính sách Unlimited Strength Thẩm quyền tập tin 8 (download)
để sử dụng này, bạn phải cấu hình bằng cách sử dụng đối số JVM:
-Dcom.ibm.mq.cfg.useIBMCipherMappings=false
Lưu ý rằng việc thực hiện bảo mật mặc định hành vi differs giữa Oracle và IBM JVM:
Các Oracle JSSE Reference guide nói:
Nếu KeyManager [] tham số là null, sau đó một KeyManager trống sẽ được được định nghĩa cho ngữ cảnh này.
Các IBM JSSE Reference guide nói:
Nếu KeyManager [] paramater là null, an ninh được cài đặt các nhà cung cấp sẽ được tìm kiếm để thực hiện ưu tiên cao nhất của các KeyManagerFactory, từ đó một KeyManager thích hợp sẽ được thu được.
Điều đó có nghĩa rằng bạn phải thiết lập your own ssl context
SSLContext sslcontext = SSLContext.getInstance("TLS");
String keyStore = System.getProperty("javax.net.ssl.keyStore");
String keyStoreType = System.getProperty("javax.net.ssl.keyStoreType", KeyStore.getDefaultType());
String keyStorePassword = System.getProperty("javax.net.ssl.keyStorePassword","");
KeyManager[] kms = null;
if (keyStore != null)
{
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance(keyStoreType);
if (keyStore != null && !keyStore.equals("NONE")) {
fs = new FileInputStream(keyStore);
ks.load(fs, keyStorePassword.toCharArray());
if (fs != null)
fs.close();
char[] password = null;
if (keyStorePassword.length() > 0)
password = keyStorePassword.toCharArray();
kmf.init(ks,password);
kms = kmf.getKeyManagers();
}
sslcontext.init(kms,null,null);
Và sau đó cung cấp mà cho khách hàng MQ JMS:
JmsConnectionFactory cf = ...
MQConnectionFactory mqcf = (MQConnectionFactory) cf;
mqcf.setSSLSocketFactory(sslcontext.getSocketFactory());
Nếu sử dụng một máy chủ ứng dụng này có thể được xử lý bởi ứng dụng của bạn máy chủ.
Tôi cũng đang đối mặt với việc không thể kết nối với "TLS_RSA_WITH_AES_128_CBC_SHA", Vẫn không có giải pháp để làm cho nó hoạt động liền mạch với Sun JDK? –