英文:
How to troubleshoot error code 2 and reason code 2400 in IBM JDK 8 and IBM MQ v8 when retrieving messages?
问题
我在尝试使用IBM JDK 8和IBM MQ v8检索消息时收到错误代码2和原因代码2400(MQRC_UNSUPPORTED_CIPHER_SUITE)。有人可以帮助我识别代码中的问题吗?
英文:
I am receiving the error code 2 and the reason code 2400 (MQRC_UNSUPPORTED_CIPHER_SUITE) while attempting to retrieve a message using the IBM JDK 8 and IBM MQ v8. Can someone please help me identify the issue with my code?
public static void main(String[] args) {
int i = 0;
System.setProperty("javax.net.ssl.keyStore", "/home/oracle/cert/jks/cert.jks");
System.setProperty("javax.net.ssl.keytStorePassword", "changeit");
//System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false");
String str1 = "hostname.com";
String str2 = "1400";
String str3 = "TEST.1";
String str4 = "QMG2";
String str5 = "P.OUT.TRD";
try {
MQEnvironment.hostname = "hostname.com";
MQEnvironment.port = Integer.valueOf(str2).intValue();
MQEnvironment.channel = str3;
MQEnvironment.userID = "username";
MQEnvironment.sslCipherSuite = "SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
MQEnvironment.properties.put("transport", "MQSeries");
MQQueueManager mQQueueManager = new MQQueueManager(str4);
System.out.println("Connected to QMGR ");
byte b = 16;
MQQueue mQQueue = mQQueueManager.accessQueue(str5, b, null, null, null);
i = mQQueue.getCurrentDepth();
System.out.println(i);
mQQueue.close();
mQQueueManager.disconnect();
} catch (MQException mQException) {
mQException.printStackTrace();
}
}
}
I am receiving error code 2 and reason code 2400 while attempting to retrieve a message using the IBM JDK 8 and IBM MQ v8. Can someone please help me identify the issue with my code?
答案1
得分: 1
当程序中指定的密码套件在MQ客户端或Java JRE中都是未知的时候,会出现MQRC_UNSUPPORTED_CIPHER_SUITE错误。
通常的解释是IBM MQ JRE和非IBM JRE之间的密码套件名称不同。请参阅- https://www.ibm.com/support/pages/why-tls-connection-mq-failing-compcode-2-mqccfailed-reason-2400-mqrcunsupportedciphersuite-exception
从上述链接中:
> 要禁用非IBM运行时环境的密码套件映射,必须设置以下Java系统属性:
>
> com.ibm.mq.cfg.useIBMCipherMappings=false
>
> 例如,可以使用JVM参数进行配置:
>
> -Dcom.ibm.mq.cfg.useIBMCipherMappings=false
因为SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384
是IBM JRE的CipherSuite名称。很可能在运行应用程序时,您使用的是非IBM JRE。要验证,请添加以下日志记录的等效代码:
logger.info("在Java " + System.getProperty("java.version")
+ " 中运行自 " + System.getProperty("java.vendor"));
我怀疑这不会报告IBM,但如果确实如此,那么对于2400
,不太可能有任何服务器日志 (https://www.ibm.com/docs/en/ibm-mq/9.2?topic=problems-tls-troubleshooting#q123400___title__12)
上述链接说2400
可能是由于FIPS / 非FIPs不匹配引起的,但由于SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384
符合FIPS 140-2,这不太可能是原因。(https://www.ibm.com/docs/en/ibm-mq/9.3?topic=jms-tls-cipherspecs-ciphersuites-in-mq-classes)
英文:
A MQRC_UNSUPPORTED_CIPHER_SUITE arises when
the ciphersuite specified in the program is unknown either at the MQ client or the Java JRE.
The usual explanation is a difference in the ciphersuite names
between the IBM MQ JRE and a non-IBM JRE. See - https://www.ibm.com/support/pages/why-tls-connection-mq-failing-compcode-2-mqccfailed-reason-2400-mqrcunsupportedciphersuite-exception
From the above link:
> To disable the ciphersuite mappings for a non-IBM runtime
> environments, the following Java System Property must be set:
>
> com.ibm.mq.cfg.useIBMCipherMappings=false
>
> For example, this can be configured by using the JVM argument:
>
> -Dcom.ibm.mq.cfg.useIBMCipherMappings=false
As SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384
is an IBM JRE CipherSuite name. The likelihood is that when you are running your application, it is using a non-IBM JRE. To verify add your logging equivalent of
logger.info("Running under Java " + System.getProperty("java.version")
+ " from " + System.getProperty("java.vendor"));
I suspect that that isn't going to report IBM, but if it does then
for a 2400
there are unlikely to be any server logs (https://www.ibm.com/docs/en/ibm-mq/9.2?topic=problems-tls-troubleshooting#q123400___title__12)
The above link says that a 2400
could be caused by a FIPS / non-FIPs mismatch, but as SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384
is FIPS 140-2 compatible, this is unlikely to be the cause. (https://www.ibm.com/docs/en/ibm-mq/9.3?topic=jms-tls-cipherspecs-ciphersuites-in-mq-classes)
答案2
得分: 1
以下是要翻译的内容:
To add to @chughts answer, you can list the supported ciphers of the JVM you are using.
The following code is from https://confluence.atlassian.com/stashkb/list-ciphers-used-by-jvm-679609085.html
I updated the code to included the JVM release information.
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import javax.net.ssl.SSLServerSocketFactory;
public class Ciphers
{
public static void main(String[] args)
throws Exception
{
System.out.println("Running under Java " + System.getProperty("java.version")
+ " from " + System.getProperty("java.vendor"));
SSLServerSocketFactory ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
String[] defaultCiphers = ssf.getDefaultCipherSuites();
String[] availableCiphers = ssf.getSupportedCipherSuites();
TreeMap<String, Boolean> ciphers = new TreeMap<String, Boolean>();
for(int i=0; i<availableCiphers.length; ++i )
ciphers.put(availableCiphers[i], Boolean.FALSE);
for(int i=0; i<defaultCiphers.length; ++i )
ciphers.put(defaultCiphers[i], Boolean.TRUE);
System.out.println("Default\tCipher");
for(Iterator i = ciphers.entrySet().iterator(); i.hasNext(); ) {
Map.Entry cipher=(Map.Entry)i.next();
if(Boolean.TRUE.equals(cipher.getValue()))
System.out.print('*');
else
System.out.print(' ');
System.out.print('\t');
System.out.println(cipher.getKey());
}
}
}
I ran it against 3 different JVMs and here is what I got for output:
(1)
Running under Java 1.8.0_341 from IBM Corporation
Default Cipher
- SSL_DHE_DSS_WITH_AES_128_CBC_SHA
- SSL_DHE_DSS_WITH_AES_128_CBC_SHA256
- SSL_DHE_DSS_WITH_AES_128_GCM_SHA256
- SSL_DHE_DSS_WITH_AES_256_CBC_SHA
- SSL_DHE_DSS_WITH_AES_256_CBC_SHA256
- SSL_DHE_DSS_WITH_AES_256_GCM_SHA384
- SSL_DHE_RSA_WITH_AES_128_CBC_SHA
- SSL_DHE_RSA_WITH_AES_128_CBC_SHA256
- SSL_DHE_RSA_WITH_AES_128_GCM_SHA256
- SSL_DHE_RSA_WITH_AES_256_CBC_SHA
- SSL_DHE_RSA_WITH_AES_256_CBC_SHA256
- SSL_DHE_RSA_WITH_AES_256_GCM_SHA384
- SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA
- SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA
- SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- SSL_ECDH_ECDSA_WITH_AES_128_CBC_SHA
- SSL_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
- SSL_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
- SSL_ECDH_ECDSA_WITH_AES_256_CBC_SHA
- SSL_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
- SSL_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
- SSL_ECDH_RSA_WITH_AES_128_CBC_SHA
- SSL_ECDH_RSA_WITH_AES_128_CBC_SHA256
- SSL_ECDH_RSA_WITH_AES_128_GCM_SHA256
- SSL_ECDH_RSA_WITH_AES_256_CBC_SHA
- SSL_ECDH_RSA_WITH_AES_256_CBC_SHA384
- SSL_ECDH_RSA_WITH_AES_256_GCM_SHA384
- SSL_RSA_WITH_AES_128_CBC_SHA
- SSL_RSA_WITH_AES_128_CBC_SHA256
- SSL_RSA_WITH_AES_128_GCM_SHA256
- SSL_RSA_WITH_AES_256_CBC_SHA
- SSL_RSA_WITH_AES_256_CBC_SHA256
- SSL_RSA_WITH_AES_256_GCM_SHA384
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 - TLS_EMPTY_RENEGOTIATION_INFO_SCSV
(2)
Running under Java 1.8.0_201 from Oracle Corporation
Default Cipher
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
- TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
- TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_
英文:
To add to @chughts answer, you can list the supported ciphers of the JVM you are using.
The following code is from https://confluence.atlassian.com/stashkb/list-ciphers-used-by-jvm-679609085.html
I updated the code to included the JVM release information.
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import javax.net.ssl.SSLServerSocketFactory;
public class Ciphers
{
public static void main(String[] args)
throws Exception
{
System.out.println("Running under Java " + System.getProperty("java.version")
+ " from " + System.getProperty("java.vendor"));
SSLServerSocketFactory ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
String[] defaultCiphers = ssf.getDefaultCipherSuites();
String[] availableCiphers = ssf.getSupportedCipherSuites();
TreeMap<String, Boolean> ciphers = new TreeMap<String, Boolean>();
for(int i=0; i<availableCiphers.length; ++i )
ciphers.put(availableCiphers[i], Boolean.FALSE);
for(int i=0; i<defaultCiphers.length; ++i )
ciphers.put(defaultCiphers[i], Boolean.TRUE);
System.out.println("Default\tCipher");
for(Iterator i = ciphers.entrySet().iterator(); i.hasNext(); ) {
Map.Entry cipher=(Map.Entry)i.next();
if(Boolean.TRUE.equals(cipher.getValue()))
System.out.print('*');
else
System.out.print(' ');
System.out.print('\t');
System.out.println(cipher.getKey());
}
}
}
I ran it against 3 different JVMs and here is what I got for output:
(1)
Running under Java 1.8.0_341 from IBM Corporation
Default Cipher
* SSL_DHE_DSS_WITH_AES_128_CBC_SHA
* SSL_DHE_DSS_WITH_AES_128_CBC_SHA256
* SSL_DHE_DSS_WITH_AES_128_GCM_SHA256
* SSL_DHE_DSS_WITH_AES_256_CBC_SHA
* SSL_DHE_DSS_WITH_AES_256_CBC_SHA256
* SSL_DHE_DSS_WITH_AES_256_GCM_SHA384
* SSL_DHE_RSA_WITH_AES_128_CBC_SHA
* SSL_DHE_RSA_WITH_AES_128_CBC_SHA256
* SSL_DHE_RSA_WITH_AES_128_GCM_SHA256
* SSL_DHE_RSA_WITH_AES_256_CBC_SHA
* SSL_DHE_RSA_WITH_AES_256_CBC_SHA256
* SSL_DHE_RSA_WITH_AES_256_GCM_SHA384
* SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
* SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
* SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
* SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
* SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
* SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
* SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA
* SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA256
* SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA
* SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384
* SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* SSL_ECDH_ECDSA_WITH_AES_128_CBC_SHA
* SSL_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
* SSL_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
* SSL_ECDH_ECDSA_WITH_AES_256_CBC_SHA
* SSL_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
* SSL_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
* SSL_ECDH_RSA_WITH_AES_128_CBC_SHA
* SSL_ECDH_RSA_WITH_AES_128_CBC_SHA256
* SSL_ECDH_RSA_WITH_AES_128_GCM_SHA256
* SSL_ECDH_RSA_WITH_AES_256_CBC_SHA
* SSL_ECDH_RSA_WITH_AES_256_CBC_SHA384
* SSL_ECDH_RSA_WITH_AES_256_GCM_SHA384
* SSL_RSA_WITH_AES_128_CBC_SHA
* SSL_RSA_WITH_AES_128_CBC_SHA256
* SSL_RSA_WITH_AES_128_GCM_SHA256
* SSL_RSA_WITH_AES_256_CBC_SHA
* SSL_RSA_WITH_AES_256_CBC_SHA256
* SSL_RSA_WITH_AES_256_GCM_SHA384
* TLS_AES_128_GCM_SHA256
* TLS_AES_256_GCM_SHA384
* TLS_CHACHA20_POLY1305_SHA256
TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
* TLS_EMPTY_RENEGOTIATION_INFO_SCSV
(2)
Running under Java 1.8.0_201 from Oracle Corporation
Default Cipher
* TLS_DHE_DSS_WITH_AES_128_CBC_SHA
* TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
* TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
* TLS_DHE_DSS_WITH_AES_256_CBC_SHA
* TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
* TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
* TLS_DHE_RSA_WITH_AES_128_CBC_SHA
* TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
* TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
* TLS_DHE_RSA_WITH_AES_256_CBC_SHA
* TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
* TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
* TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
* TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
* TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
* TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
* TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
* TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
* TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
* TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
* TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
* TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
* TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
* TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
* TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
* TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
* TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
* TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
* TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
* TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
* TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
* TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
* TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
* TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
* TLS_RSA_WITH_AES_128_CBC_SHA
* TLS_RSA_WITH_AES_128_CBC_SHA256
* TLS_RSA_WITH_AES_128_GCM_SHA256
* TLS_RSA_WITH_AES_256_CBC_SHA
* TLS_RSA_WITH_AES_256_CBC_SHA256
* TLS_RSA_WITH_AES_256_GCM_SHA384
(3)
Running under Java 17.0.7 from Oracle Corporation
Default Cipher
* TLS_AES_128_GCM_SHA256
* TLS_AES_256_GCM_SHA384
* TLS_CHACHA20_POLY1305_SHA256
* TLS_DHE_DSS_WITH_AES_128_CBC_SHA
* TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
* TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
* TLS_DHE_DSS_WITH_AES_256_CBC_SHA
* TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
* TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
* TLS_DHE_RSA_WITH_AES_128_CBC_SHA
* TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
* TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
* TLS_DHE_RSA_WITH_AES_256_CBC_SHA
* TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
* TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
* TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
* TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
* TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
* TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
* TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
* TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
* TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
* TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
* TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
* TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
* TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
* TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
* TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
* TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
* TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
* TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
* TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
* TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
* TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
* TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
* TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
* TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
* TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
* TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
* TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
* TLS_EMPTY_RENEGOTIATION_INFO_SCSV
* TLS_RSA_WITH_AES_128_CBC_SHA
* TLS_RSA_WITH_AES_128_CBC_SHA256
* TLS_RSA_WITH_AES_128_GCM_SHA256
* TLS_RSA_WITH_AES_256_CBC_SHA
* TLS_RSA_WITH_AES_256_CBC_SHA256
* TLS_RSA_WITH_AES_256_GCM_SHA384
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论