根据官方文档tomcat8.5且JAVA7及其以上才支持SNI
如果tomcat版本较低,且需要绑定多个域名情况下,建议使用反向代理方式部署HTTPS
tomcat绑定SSL比较简单,在 <Connector port=”8080″配置字节下新增443端口监听设置即可。
配置字节如下:
<Connector port=”443″
protocol=”HTTP/1.1″
SSLEnabled=”true”
scheme=”https”
secure=”true”
keystoreFile=”pfx证书路径”
keystoreType=”PKCS12″
keystorePass=”证书导入密码”
clientAuth=”false”
ciphers=”TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256″
SSLProtocol=”TLSv1+TLSv1.1+TLSv1.2″
SSLCipherSuite=”ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4″/>
本例中根据证书路径和情况修改如下:
保存后重启tomcat服务。
访问测试效果:
从上面探针可以看到我这里使用tomcat版本为8.5.23,支持SNI,即可以绑定多个域名和对应证书。
tomcat中多域名SSL绑定使用SSLHostConfig配置字节来分别制定每个域名对应证书文件和设置。
这里使用apache格式证书文件绑定,增加内容如下:
<Connector port=”443″
protocol=”org.apache.coyote.http11.Http11Nio2Protocol”
maxThreads=”150″
SSLEnabled=”true”
defaultSSLHostConfigName=”milworm.cn” >
<!–第一个域名证书设置–>
<SSLHostConfig hostName=”milworm.cn” >
<Certificate certificateKeyFile=”D:/server/Apache2.2/conf/cert/milwrom/private.key”
certificateFile=”D:/server/Apache2.2/conf/cert/milwrom/certificate.crt”
certificateChainFile=”D:/server/Apache2.2/conf/cert/milwrom/ca_bundle.crt”
type=”RSA” />
</SSLHostConfig>
<!–第二个域名证书设置–>
<SSLHostConfig hostName=”www.pentester.cn” >
<Certificate certificateKeyFile=”D:/server/Apache2.2/conf/cert/pentester/private.key”
certificateFile=”D:/server/Apache2.2/conf/cert/pentester/certificate.crt”
certificateChainFile=”D:/server/Apache2.2/conf/cert/pentester/ca_bundle.crt”
type=”RSA” />
</SSLHostConfig>
</Connector>
配置文件:
如上,分别指定了milworm和pentester域名的证书路径。
使用host配置字节方式,新增两个站点,分别绑定不同域名、指向不同目录。
访问测试:
证书正常,探针显示域名、路径都和指定路径相同。
tomcat直接绑定证书注意是否有多域名多站点需求
留意JDK、tomcat版本
tomcat不支持SNI或操作繁琐的情况下,考虑IIS、apache、nginx代理方式,在IIS、apache、nginx前端web服务上来操作绑定HTTPS
IIS反向代理tomcat绑定https时,选择上启用SSL卸载。以免tomcat未配置HTTPS访问的情况下请求得不到正常响应。
取消启用SSL卸载情况下访问tomcat运用,出现502错误:
启用SSL卸载,IIS和后端互采用http方式:
取消SSL卸载选项,IIS和后端交换协议根据请求选择:
配置文件下载:tomcat8-ssl.zip
注:为了测试apache\IIS反向代理下绑定SSL,配置文件中HTTPS相关字节已注释。