- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在运行 Java 8 并使用 com.sun.net.httpserver.HttpsServer
创建一个 HTTPS 服务器。我有一个在 Java KeyStore 中使用受信任的 CA 签名的 EC 证书的有效实现。
我一直在研究如何限制服务器可以支持的密码和协议(protocol)(类似于在配置中使用“SSLProtocol”和“SSLCipherSuite”的 Apache)——主要是通过禁用SHA-1。
没有人真的应该强制 TLSv1.1 超过 1.2,但我这样做只是为了证明以下配置有效:
KeyStore ks = KeyStore.getInstance("JKS");
// Load KeyStore into "ks"
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, jksPassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(ks);
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
HttpsServer hsS = HttpsServer.create(sBind, 0);
hsS.setHttpsConfigurator(new HttpsConfigurator(sc) {
@Override
public void configure(HttpsParameters p) {
try {
SSLContext c = getSSLContext();
SSLEngine e = c.createSSLEngine();
p.setNeedClientAuth(false);
p.setProtocols(new String[] { "TLSv1.1" });
p.setCipherSuites(e.getEnabledCipherSuites());
p.setSSLParameters(c.getDefaultSSLParameters());
}
catch (Exception e) {
e.printStackTrace();
}
}
});
即使我使用 setProtocols()
只接受“TLSv1.1”,这似乎并没有停止“TLSv1.2”连接,从 Chrome 到 IE 的所有内容仍然使用“TLSv1.2”。 2”。如果我在 IE 中禁用“TLSv1.2”和“TLSv1.1”并仅启用“TLSv1.0”,那么它仍然可以工作并协商“TLSv1.0”。 setProtocols()
方法似乎没有做任何事情!?!
如果我能正常工作,那么我将使用 setCipherSuites()
修改密码列表。
最佳答案
您可以通过更新 jre/lib/security/java.security
文件来调整它。查找如下条目并进行调整。
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.2, RC4, MD5withRSA, DH keySize < 768, \
EC keySize < 224
关于Java HttpsServer - 强制 TLSv1.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42365559/
Azure 顾问建议:您的 Azure Database for MySQL - 灵活服务器容易因使用较弱、已弃用的 TLSv1 或 TLSv1.1 协议(protocol)而受到攻击 我已在 MyS
我是一名优秀的程序员,十分优秀!