我正在尝试使用自定义密钥库/信任库和TLSv1打开一个
已启用。以下是我打开此类插座的相关代码:SSLServerSocket
。2
SSLContext sslContext = null;
ServerSocket serverSocket = null;
KeyManagerFactory kmf = null;
KeyStore keystore = loadKeyStore(KEYSTORE_FILE);
if (keystore == null) {
// throw exception
}
char[] psw = System.console().readPassword("Enter password for the key materials in file \"%s\":", KEYSTORE_FILE);
try {
kmf = KeyManagerFactory.getInstance("PKIX");
kmf.init(keystore, psw);
} catch (NoSuchAlgorithmException | UnrecoverableKeyException | KeyStoreException e) {
e.printStackTrace();
kmf = null;
// throw exception
}
try {
sslContext = SSLContext.getInstance("TLSv1.2");
System.out.println(kmf==null); // prints false
sslContext.init(kmf==null?null:kmf.getKeyManagers(), null, null);
} catch (NoSuchAlgorithmException | KeyManagementException e) {
// throw exception
}
try {
serverSocket = sslContext.getServerSocketFactory().createServerSocket(PORT, BACKLOG, HOST);
((SSLServerSocket)serverSocket).setEnabledProtocols(new String[]{"TLSv1.2"});
} catch (IOException e) {
// throw exception
}
loadKeyStore
函数是,
private static KeyStore loadKeyStore(String filename) {
KeyStore keystore = null;
FileInputStream fis = null;
try {
keystore = KeyStore.getInstance("JKS");
char[] psw = System.console().readPassword("Enter password for the KeyStore file \"%s\":", filename);
if (psw != null) {
fis = new FileInputStream(filename);
keystore.load(fis, psw);
}
} catch (KeyStoreException | NoSuchAlgorithmException | CertificateException | IOException e) {
keystore = null;
LogManager.getLogger().fatal("cannot load KeyStore from file \"" + filename + "\".", e);
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
LogManager.getLogger().error("cannot close file " + filename, e);
}
fis = null;
}
}
return keystore;
}
我接受不同线程中的连接作为
while (!stopped) {
Socket socket = null;
try {
socket = serverSocket.accept();
} catch (IOException e) {
if (!stopped) {
logger.error("exception while accepting connections.", e);
}
break;
}
// start new threads to handle this connection
}
问题是,当我在Firefox上输入https://HOST: PORT时,它说:
Firefox无法保证主机上数据的安全,因为它使用的是SSLv3,这是一种失效的安全协议。高级信息:ssl\u错误\u无\u密码\u重叠
如何打开只接受TLSv1的服务器套接字。2个连接?
附言:我试着一个接一个地将代码中的“TLSv1.2”字符串更改为“TLS”,但没有任何改变。
编辑:我对代码进行了如下编辑:
serverSocket = sslContext.getServerSocketFactory().createServerSocket(port, backlog, host);
((SSLServerSocket)serverSocket).setEnabledProtocols(new String[]{"TLSv1.2"});
for (String s: ((SSLServerSocket)serverSocket).getEnabledCipherSuites()) {
System.out.println(s);
}
输出是,
我们的研究结果是一个数据,一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的一些数据的数据的一些数据的一些数据的数据的一些数据的数据的一些RSA的一些数据的一些RSA的一些数据的一些数据的一些数据的一些数据的数据的一些RSA的一些数据的数据的数据的一些数据的数据的数据的数据的一些数据的一些数据的一些数据的数据的数据的一些RSA的数据的一些数据的数据的数据的数据的数据的一些数据的数据的数据的数据的数据的数据的数据的数据的数据的一些RSA的数据的一些数据的数据的数据的数据的数据的数据的数据的数据的数据的一些RSA的一些_ECDSA_与_AES_128_CBC_SHA TLS_ECDHE_RSA_与_AES_128_CBC_SHA TLS_RSA_与_AES_128_CBC_SHA TLS_ECDH_ECDSA_与_AES_128_CBC_SHA研究结果表明,我们的一些数据(ECDH的一些数据(ECDH)和RSA(RSA)的一些数据(ECDH的一些数据(128)的一些数据(CBC的一些数据(ECDH的一些数据)的一些数据(ECDH的一些数据(ECDH的一些数据)的一些数据(数据)的一些数据(数据)的数据(数据)的数据(数据)的数据(数据)的数据(数据)的数据(数据)的数据(数据)、数据(数据)的数据(数据)、数据(数据)的数据(数据)、数据(数据)的数据(数据)、数据(数据)的数据(数据)的数据(数据)的数据)、数据(数据)、数据(数据)、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、数据、U带AES_128_GCM_SHA256 TLS_DHE_RSA_带AES_128_GCM_SHA256 TLS_DHE_DSS_带AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_带CBC_3DES_EDE_SHA我们的研究结果是一个加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密加密RSA_与RC4_128_SHA SSL_RSA_与RC4_128_SHA TLS_ECDH_ECDSA_与RC4_128_SHA TLS_ECDH_RSA_与RC4_128_SHA SSL_RSA_与RC4_128_MD5TLS_清空_重新协商_信息_SCSV
我不确定,但问题似乎不是缺少启用的密码套件。对吗?
(我在这里回答了一个非常类似的问题。)
本质上,SSLContext。getInstance(“TLSv1.2”)
也可以返回支持其他协议的实例。
如果您想使用一组特定的协议,您需要使用setEnabled协议(...)
,这是您在第一次编辑后所做的。现在,您可以获得一些名称以SSL_
开头的密码套件,但这只是名称,它们仍然适用于TLS 1.2。正如JDK 8的Java密码体系结构标准算法名称文档所说:
一些JSSE密码套件名称是在TLSv1之前定义的。0已最终确定,因此被赋予SSL_uu前缀。TLS RFC中提到的名称前缀为TLS_u,在功能上等同于JSSE密码套件前缀为SSL_u。
您的上一个问题(“没有可用的对等证书”,以及握手失败)似乎表明您试图使用的密钥库中没有找到证书(及其私钥)。
事实上,尽管您提到的密码套件已经启用,但如果无法使用,它们将被自动禁用。所有密码套件都是RSA或DSS密码套件,这意味着它们需要一个带有RSA或DSA密钥的证书和它的私钥才能使用。如果在密钥存储库中找不到这种带有私钥条目的证书,那么KeyManager
和SSLContext
将无法使用它。因此,当实际尝试握手时,它们将被禁用。这通常会导致在服务器端的握手过程中抛出异常("javax.net.ssl.SSLHandshakeExctive: no cipher Suite in public
"),以及通过OpenSSL在客户端获得的错误消息。
我希望尽可能多的编程。我也可以使用自签名证书。 我所学的一个教程建议使用java应用程序创建一个证书,然后将该文件移到java项目中。我已经使用终端命令完成了这项工作。我将密码指定为。 然后,我调用函数,希望SSLSockets能够工作,但它仍然不能工作。
问题内容: 我使用和对象编写了一个客户端/服务器Java程序。然后,我修改了要使用的代码和“ SSLSocket”,但是抛出了不同的异常,包括: 我希望能以编程方式做更多的事情。我也可以使用自签名证书。 我遵循的一个教程建议使用Java应用程序创建证书,然后将该文件移入Java项目。我已经用terminal命令完成了。我将密码指定为。 然后我调用该函数,希望SSLSockets可以正常工作,但仍然
我看到现有的问题标题相同,但那是一个不同的问题。 假设我想在
问题内容: 这个想法是读取String并确认它不包含任何数字字符。因此,“ smith23”之类的内容将不被接受。 问题答案: 你想要什么?速度还是简单?为了提高速度,请选择基于循环的方法。为简单起见,请使用一种基于内衬RegEx的方法。 速度 简单
问题内容: 我只想在我的姓名字段中输入字母作为输入。 我已经尝试过使用matchs方法,但是不幸的是出了点问题,并且抛出了异常。 还有其他检查方法吗? 问题答案: 您可以尝试使用此正则表达式
问题内容: 我正在尝试使用以下命令选择MySQL中仅包含字母数字字符的所有行: 但是,它将返回所有行,而不管它们包含非字母数字字符的事实。 问题答案: 试试这个代码: 这样可以确保所有字符都匹配。