Tomcat8 SSL 连接器
Tomcat8 SSL connector
我按照 official tutorial 在 tomcat8 上安装 ssl,但我的浏览器给我一个 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误。
首先我给你关于服务器的信息:
- ip : 10.1.5.55
- Tomcat 端口:8200
- Java 版本:1.8.0_121
- Tomcat 版本:Apache Tomcat/8.5.11
- Servlet 规范版本:3.1
- JSP 版本:2.3
我使用 https://10.1.5.55:8200/
作为 url 连接到我的服务器(使用 http 协议)
让我感到困惑的第一件事是所有教程都在谈论连接器,例如:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" .../>
但是基本配置文件 server.xml 为我提供了这个模板:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
无论如何,我按照教程在 E:\keys 下生成了我的密钥库:
keytool -genkey -alias myapp -keystore myapp-keystore
在我输入的名字和姓氏中:10.1.5.55:8200
密码 : changeit
我按 return 以获取密钥的相同密码。
然后我就这样写了我的连接器(我在8199上修改了http端口为运行):
<Connector
port="8200"
protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="300"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="E:\keys\myapp-keystore"
keystorePass="changeit"
/>
但是此时我得到了错误。
现在有我尝试过的所有解决方案:
- 一一尝试所有 TLS 协议(v1、v1.1、v1.2、SSLv3)
- 通过 10.1.5.55 lonely 更改密钥库的名字和姓氏
- 尝试协议="HTTP/1.1",协议组织...Http11Nio2Protocol
最后我尝试添加密码。这是我使用的列表:
ciphers="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
TLS_ECDH_ECDSA_WITH_RC4_128_SHA,
TLS_ECDH_RSA_WITH_RC4_128_SHA,
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_EMPTY_RENEGOTIATION_INFO_SCSVF
"
我得到了这个列表 from here,在这里我了解到 Tomcat7 w/ Java7 与 Tomcat8 w/ Java8 的工作方式不同.我尝试按照此处的建议删除 "sslProtocol" 并添加 "useServerCipherSuitesOrder" 但没有任何效果,我的浏览器总是出现相同的错误。
请有人告诉我如何解决这个问题?
您正在生成 1024 位的 DSA 证书,Chrome stops/stopped 支持 DSA(DSS),如 or here 所示。尝试生成2048位的RSA证书
替换此命令
keytool -genkey -alias myapp -keystore myapp-keystore
和
keytool -genkey -alias myapp -keystore myapp-keystore -keyalg RSA
我按照 official tutorial 在 tomcat8 上安装 ssl,但我的浏览器给我一个 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误。
首先我给你关于服务器的信息:
- ip : 10.1.5.55
- Tomcat 端口:8200
- Java 版本:1.8.0_121
- Tomcat 版本:Apache Tomcat/8.5.11
- Servlet 规范版本:3.1
- JSP 版本:2.3
我使用 https://10.1.5.55:8200/
作为 url 连接到我的服务器(使用 http 协议)
让我感到困惑的第一件事是所有教程都在谈论连接器,例如:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" .../>
但是基本配置文件 server.xml 为我提供了这个模板:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
无论如何,我按照教程在 E:\keys 下生成了我的密钥库:
keytool -genkey -alias myapp -keystore myapp-keystore
在我输入的名字和姓氏中:10.1.5.55:8200 密码 : changeit 我按 return 以获取密钥的相同密码。
然后我就这样写了我的连接器(我在8199上修改了http端口为运行):
<Connector
port="8200"
protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="300"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="E:\keys\myapp-keystore"
keystorePass="changeit"
/>
但是此时我得到了错误。
现在有我尝试过的所有解决方案:
- 一一尝试所有 TLS 协议(v1、v1.1、v1.2、SSLv3)
- 通过 10.1.5.55 lonely 更改密钥库的名字和姓氏
- 尝试协议="HTTP/1.1",协议组织...Http11Nio2Protocol
最后我尝试添加密码。这是我使用的列表:
ciphers="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
TLS_ECDH_ECDSA_WITH_RC4_128_SHA,
TLS_ECDH_RSA_WITH_RC4_128_SHA,
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_EMPTY_RENEGOTIATION_INFO_SCSVF
"
我得到了这个列表 from here,在这里我了解到 Tomcat7 w/ Java7 与 Tomcat8 w/ Java8 的工作方式不同.我尝试按照此处的建议删除 "sslProtocol" 并添加 "useServerCipherSuitesOrder" 但没有任何效果,我的浏览器总是出现相同的错误。
请有人告诉我如何解决这个问题?
您正在生成 1024 位的 DSA 证书,Chrome stops/stopped 支持 DSA(DSS),如
替换此命令
keytool -genkey -alias myapp -keystore myapp-keystore
和
keytool -genkey -alias myapp -keystore myapp-keystore -keyalg RSA