我正在尝试创建一个用于 Apache Tomcat 6 的自签名证书。我可以制作的每个证书总是会导致浏览器与 AES-128 连接。客户希望我证明我可以在 AES-256 上创建连接。
我试过java的keytool和openssl。我尝试了各种参数,但似乎无法指定任何关于密钥大小的信息,只是签名大小。
如何获得浏览器-tomcat 连接以使用带有自签名证书的 AES-256?
Okie doke,我想我刚刚想通了。
正如我上面所说,关键的知识点是证书无关紧要,只要它是使用支持 AES 256 位加密(例如 RSA)的算法生成的。为了确保我们在同一页面上,为了我的测试,我使用以下内容生成了我的自签名证书:
keytool -genkey -alias tomcat -keyalg RSA
现在,您必须确保您的服务器上的 Java 实现支持 AES-256,这是一个棘手的问题。我在 OS X (OS 10.5) 机器上进行了测试,当我查看它默认支持的密码列表时,AES-256 不在列表中,这就是为什么只使用上面生成的证书的原因在我的浏览器和 Tomcat 之间创建 AES-128 连接。(嗯,从技术上讲,TLS_RSA_WITH_AES_256_CBC_SHA 不在列表中——根据这个 JDK 5 列表,这就是你想要的密码。)
为了完整起见,这是我创建的用于检查我的盒子支持的密码的简短 Java 应用程序:
import java.util.Arrays;
import javax.net.ssl.SSLSocketFactory;
public class CipherSuites {
public static void main(String[] args) {
SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault();
String[] ciphers = sslsf.getDefaultCipherSuites();
Arrays.sort(ciphers);
for (String cipher : ciphers) {
System.out.println(cipher);
}
}
}
事实证明,这个 OS X 机器默认安装的 JDK 5 需要安装“Unlimited Strength Jurisdiction Policy Files”,以便告诉 Java 可以使用更高位的加密级别;您可以在此处找到这些文件(向下滚动并查看“其他下载”部分的顶部)。我不确定 JDK 6 是否需要做同样的事情,但是这里提供了 JDK 6 的相同策略文件,所以我认为它确实如此。解压缩该文件,阅读自述文件以了解如何将文件安装到它们所属的位置,然后再次检查您支持的密码......我敢打赌 AES-256 现在在列表中。
If it is, you should be golden; just restart Tomcat, connect to your SSL instance, and I bet you'll now see an AES-256 connection.
danivo,只要服务器的证书能够进行 AES 加密,浏览器和服务器之间的加密级别就与证书本身无关——加密级别是在浏览器和服务器之间协商的。换句话说,我的理解是证书没有指定加密级别,只是加密类型(例如,AES)。请参阅此链接(PDF) 以验证这一点,以及证书经销商如何追加销售“支持 256 位”的证书,尽管证书不是决定 256 位功能的因素。
因此,您拥有支持 AES-128 的证书就可以了——他们的关键是弄清楚如何让 Tomcat 支持 AES-256(因为大多数(如果不是全部)主流浏览器肯定支持它)。
SSL 连接的强度是在浏览器和服务器(或任何提供 SSL)之间协商的。可能是他们的浏览器要求使用较弱的密码。他们有没有在这个浏览器上看到过 256-AES SSL 连接?AES-128 仍然是一种非常安全的算法,所以除非他们想要保护某些东西免受离线攻击(想想:超级计算机蛮力生成 2^128 密钥维基百科)攻击,否则 128 位应该没问题。如果他们真的需要那么多保护,他们可能应该使用比网站更稳定的数据访问解决方案,到他们的服务器的安全 ssh 隧道是防弹的(你可以告诉他们他们可以拥有 256 位 AES 和 4096 位RSA 也是),或 vpn 取决于实现。
I think what you are looking for is http://www.sslshopper.com/article-how-to-disable-weak-ciphers-and-ssl-2-in-tomcat.html and http://docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA
Depending on whether you want good security and compatibility or PCI certification.