java - 如何在 jdk RSA 算法中禁用 keySize 1024?

标签 java security ssl

环境: Java 版本 1.8.0_121

情况:

使用 RSA 1024 创建证书。 已启用 SSL,我的网站可从 https 访问。

任务: 我想禁用 RSA 1024 的站点可用性。

行动:

我修改了jdk.certpath.disabledAlgorithms=RSA keySize < 2048然后从名为网站的浏览器 -> 可用且 RSA 未被禁用。

我修改了jdk.certpath.disabledAlgorithms=RSA然后从名为网站的浏览器 -> 不可用且 RSA 被禁用(收到错误消息,请参阅RESULT)。

结果

javax.net.ssl.SSLHandshakeException: no cipher suites in common
    at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478)
    at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
    at sun.security.ssl.SSLEngineImpl.writeAppRecord(SSLEngineImpl.java:1214)
    at sun.security.ssl.SSLEngineImpl.wrap(SSLEngineImpl.java:1186)
    at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:469)
    at org.apache.tomcat.util.net.SecureNioChannel.handshakeWrap(SecureNioChannel.java:424)
    at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:205)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1411)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

问题:

如何通过 keySize 约束禁用 RSA?

最佳答案

REVISED:抱歉,我不知何故认为这是针对客户端和(因此)证书验证;回想起来你并没有这么说,但只有来自 Tomcat(服务器!)的跟踪让我意识到这一点。经过进一步正确调查:

所有 Oracle j8+ 版本(和一些 j7)的默认语法在您编辑的位置旁边的注释中解释为 RSA keySize < 2048RSA keySize <= 1024 -- 但 keySize 部分仅适用于证书(路径)验证,它适用于实际的特定证书,通常在 SSL/TLS 客户端而非 SSL/TLS 服务器上完成。

JSSE 同时使用 jdk.tls.disabledAlgorithmsjdk.certpath.disabledAlgorithms过滤使用的密码套件列表(现在看它,我不确定为什么;不适合证书验证的算法不会自动使其不适合 TLS)但密码套件过滤仅适用于整个算法的条目而不特定 keySize 的条目,因为在完成密码套件过滤时 keySize 并不可靠。 (客户端根本不知道;服务器可以有多个键和链,选择可以使用 ClientHello 中的 SNI 扩展。选择也可以基于客户端的 supported_curves,OpenSSL 可以,但 AFAICS JSSE 至少没有默认为 X509KeyManagerImpl 。)

因此虽然设置jdk.certpath.disabledAlgorithms=alg确实具有禁用所有 {alg} 密码套件的效果,设置 alg keySize...才不是。我不认为你可以自动检查这个,你只需要不配置太弱的 key (及其证书/链)。

(也清理了评论。)

关于java - 如何在 jdk RSA 算法中禁用 keySize 1024?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359831/

相关文章:

java - 尽管列表相同,assertEquals 仍无法通过测试

带有 SSL 错误的 Python3 套接字编程?

java - Selenium WebDriver 丢失 IE 中打开的新窗口的信息

java - Eclipse会忽略条件断点(java for hadoop)

java - 设置 X-Content-Type-Options 响应 header 会损坏 PNG 文件

java - java 中的安全日志记录

IIS:SSL 站点未通过 https 响应所有浏览器/设备

ASP.net SSL 问题

java - 字母计数器(使用子字符串而不是通常的 atChar() 方法)

linux - GIT 权限 : Repository inside a repository