我正在尝试创建一个用于 Apache Tomcat 6 的自签名证书。我制作的每个证书始终会导致浏览器与 AES-128 连接。客户希望我证明我可以在 AES-256 上创建连接。

我尝试过java的keytool和openssl。我尝试过各种参数,但似乎无法指定有关密钥大小的任何内容,只能指定签名大小。

如何获得浏览器-tomcat 连接以使用带有自签名证书的 AES-256?

有帮助吗?

解决方案

好吧,我想我刚刚明白了这一点。

正如我上面所说,关键的知识点是证书并不重要,只要它是使用支持 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 需要安装“无限强度管辖策略文件”,以便告诉 Java 可以使用更高位的加密级别;你可以 在这里找到这些文件 (向下滚动并查看“其他下载”部分的顶部)。我不确定 JDK 6 是否需要做同样的事情,但 JDK 6 需要相同的策略文件 可以在这里找到, ,所以我认为确实如此。解压缩该文件,阅读自述文件以了解如何将文件安装到它们所属的位置,然后再次检查您支持的密码...我敢打赌 AES-256 现在在列表中。

如果是的话,你应该是金色的;只需重新启动 Tomcat,连接到您的 SSL 实例,我打赌您现在会看到 AES-256 连接。

其他提示

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,具体取决于实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top