Tomcat 6的强大SSL

时间:2020-03-06 14:21:16  来源:igfitidea点击:

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

我已经尝试过Java的keytool和openssl。我尝试了各种参数,但似乎无法指定任何有关keysize的信息,仅能指定签名的大小。

如何获得浏览器与tomcat的连接以将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取决于实施方式。

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,它需要安装"无限强度权限策略文件",以便告诉Java使用更高位的加密级别是可以的。我们可以在此处找到这些文件(向下滚动并查看"其他下载"部分的顶部)。我不确定JDK 6是否需要完成相同的工作,但是这里提供了JDK 6的相同策略文件,因此我认为确实需要。解压缩该文件,阅读自述文件以了解如何在其所属的位置安装文件,然后再次检查支持的密码...我敢打赌AES-256现在在列表中。

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