Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

为通过 ATS 检测 Tomcat 完全 TLS v1.2、完全正向加密及其结果检验

0
0

2017 年起 app store 要求 app 对接的服务器支持 TLS v1.2,否则 ats 检测不予通过。有点强制推 TLS v1.2 的意味。本文介绍如何使 tomcat 强制执行 TLS v1.2、完全正向加密。本文示例 tomcat 版本 7.0.68,jdk 版本 1.7.0。

笔者强烈推荐在 DNS 解析层或反向代理服务层做这件事情,不建议放在 tomcat 这一层做。如果你非要在 tomcat 这层做,可以参考本文的做法。

首先声明,tomcat 7 以后能够通过 JSSE 支持 TLSv1、TLSv1.1、TLSv1.2。也能支持 ATS 所要求的那些正向签字算法,但是 ATS 要求只能支持这些正向签字算法,一些安全级别较弱的算法不能够支持,也就是完全正向加密。总之,本文要做的事情就是禁用 TLSv1、TLSv1.1,禁用非正向加密的弱签字算法。

1. Tomcat 强制完全 TLS v1.2

JDK 1.7 以上的 JSSE 才能支持到 TLS v1.2。

1.1. ssl 证书迁移到 tomcat 1.1.1. 联系证书颁发公司,转换为 jks 后缀格式

对方技术支持会返回 keystore.jks 证书文件及其密码证书密码。

1.1.2. 将证书文件放在 %tomcat%/conf/ 目录 1.1.3. 证书 tomcat 配置

将 %tomcat%/conf/server.xml 中的以下注释部分取消注释:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />

然后向该 Connector 标签添加证书相关参数:

keystoreFile=" conf/keystore.jks " keystorePass=" 证书密码 "

1.2. 配置 tomcat 支持 TLSv1.2 1.2.1. jvm 支持

编辑 %tomcat%/bin/catalina.sh(或 bat),在文件内容前添加:

set JAVA_OPTS=-Djdk.tls.client.protocols="TLSv1.2" -Dsun.security.ssl.allowUnsafeRenegotiation=false -Dhttps.protocols="TLSv1.2"

1.2.2.tomcat 配置

在上述 Connector 标签添加以下参数:

sslEnabledProtocols="TLSv1.2"

1.3. 完全 TLS v1.2 的检测 1.3.1. tomcat 启动时的验证

我们在启动 tomcat 的时候可以看到配置的 JAVA_OPTS 相关日志:

一月 11, 2017 11:29:36 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Djdk.tls.client.protocols= TLSv1.2

一月 11, 2017 11:29:36 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Dsun.security.ssl.allowUnsafeRenegotiation= false

一月 11, 2017 11:29:36 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Dhttps.protocols=

TLSv1.2

1.3.2. openssl 命令行工具

我们先看看 TLSv1.1 协议是否已禁用:

C:\tools\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_1

CONNECTED(000000D0)

3252:error :14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:ssl\record\rec_layer_s3.c:1394:SSL alert number 40

---

no peer certificate available

---

No client certificate CA names sent

---

握手失败,TLSv1.1 协议是否已禁用。再来看看 TLSv1.2:

C:\tools\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_2

CONNECTED(000000D0)

depth=0 C = cn, ST = sh, L = sh, O = ips, OU = ips, CN = defonds kong

verify error:num=18:self signed certificate

verify return:1

depth=0 C = cn, ST = sh, L = sh, O = ips, OU = ips, CN = defonds kong

verify return:1

---

Certificate chain

0 s:/C=cn/ST=sh/L=sh/O=ips/OU=ips/CN=defonds kong

i:/C=cn/ST=sh/L=sh/O=ips/OU=ips/CN=defonds kong

---

Server certificate

-----BEGIN CERTIFICATE-----

(略)

-----END CERTIFICATE-----

subject=/C=cn/ST=sh/L=sh/O=ips/OU=ips/CN=defonds kong

issuer=/C=cn/ST=sh/L=sh/O=ips/OU=ips/CN=defonds kong

---

No client certificate CA names sent

Peer signing digest: SHA512

Server Temp Key: ECDH, P-256, 256 bits

---

可以看到 tomcat 只支持 TLSv1.2 了。

2. Tomcat 强制完全正向加密 2.1. 配置 tomcat

在上述Connector标签添加以下参数:

ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,

TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,

TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,

TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,

TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,

TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,

最后重启tomcat即可。

2.2. 完全正向加密的检测

很多证书服务商提供了在线 ATS 检测接口,比如:

腾讯云 亚数

如腾讯云的检测结果:


为通过 ATS 检测 Tomcat 完全 TLS v1.2、完全正向加密及其结果检验
3. 相关工具下载

本文所涉及 openssl 工具安装包,以及 server.xml、catalina.bat、keystore.jks 都已打包上传 CSDN 资源,有兴趣的朋友可以自行去下载以参考:

SSL/TLS 检测工具以及 tomcat 正向加密配置例子。

参考资料 Does Tomcat support TLS v1.2? CommVault: Secure your insecure Web Console (Tomcat) and enable SSL / Perfect Forward Secrecy

Viewing all articles
Browse latest Browse all 12749


click here for Latest and Popular articles on Search Engine Optimization (SEO)