tomcat - 如何将 OpenSSL 的密码列表映射到 Java JSSE

标签 tomcat openssl jetty jsse

我关注了Hardening your web servers ssl ciphers建议使用的指南

ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS

但是我正在尝试配置基于纯 Java(Tomcat、Jetty)的 Web 服务器,而不是基于 Apache 或 OpenSSL 的 Web 服务器。我如何找出哪些 JSSE 密码名称对应于

openssl ciphers -V 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS'

最佳答案

Java 的 JSSE 密码套件名称对应于标准 TLS Cipher Suite List ,您可以在其中下载官方代码及其名称的 CSV 文件。 CSV 文件称为“tls-parameters-4.csv”。使用一个小的 shell 脚本,您可以将 OpenSSL 名称映射到 JSSE 名称 - 通过密码的官方十六进制代码。

$ cat openssl2jsse.sh 
#!/bin/bash
CODE=`openssl ciphers -V  | grep $1 | sed 's/ //g' | cut -d '-' -f1 `
grep $CODE tls-parameters-4.csv | cut -d ',' -f3

$ cat resolve.sh 
#!/bin/bash
COMBINEDLIST=
while read line
do
        ENTRY=`./openssl2jsse.sh $line`
        echo $ENTRY
        COMBINEDLIST=$COMBINEDLIST,$ENTRY
done
echo "ciphers="$COMBINEDLIST

将 openssl ciphers -V 的输出通过管道传输到 resolve.sh 脚本中将生成正确排序的 java 密码套件列表。

$ openssl ciphers -V 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS' | ./resolve.sh
... 
ciphers=,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA

此脚本可以节省手动映射值列表的几分钟时间。

关于tomcat - 如何将 OpenSSL 的密码列表映射到 Java JSSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19846020/

相关文章:

oracle - 热重新部署和 Oracle 数据库的 Permgen 内存泄漏

java - 无法从 servlet 读取 lucene 创建的索引目录

multithreading - tomcat类加载器性能问题

java - 为什么 JasperReports 将 pdf 文本从 jdk 1.5 截断到 jdk1.7?

JAVA-生成预定的JSON

linux - Jetty bash 脚本仅适用于 root 用户

ssl - 在有或没有 BIO 的情况下使用 OpenSSL TLS?

c++ - OpenSSL "No Shared cipher"

ssl - CA(证书颁发机构)从 CSR 交付什么?

java - 使用 Maven 构建 jetty 时出错?