在Tomcat中混合密钥

通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习。

深入了解Tomcat,了解如何创建自签名RSA密钥,ECDSA密钥,以及如何通过多次保留验证Tomcat。

 

在上一篇博客文章中,我们研究了Tomcat 8.5+如何使用SNI将证书映射到请求的主机名。

Tomcat 8.5+可以更进一步,并为每个主机支持多种证书类型。 这对于在较旧的浏览器中支持RSA以及在兼容的浏览器中支持ECDSA最为有用。

在此博客文章中,我们将研究如何使用多种证书类型配置Tomcat。

创建自签名RSA密钥

要生成RSA私钥和自签名证书,请使用以下命令:

openssl req -x509 -newkey rsa:4096 -keyout rsa.key -out rsa.crt -days 365

 

创建自签名的ECDSA密钥

要创建ECDSA私钥,请使用以下命令:

openssl ecparam -genkey -out ecdsa.key -name prime256v1

 

名称参数是命令返回的列表中的一个:

openssl ecparam -list_curves

 

OpenSSL支持大量曲线,但是浏览器通常仅支持非常少量的曲线。 SSL实验室允许测试浏览器对命名曲线的支持。 在下面的屏幕截图中,可以看到Firefox 57支持的曲线:x25519,secp256r1,secp384r1,secp521r1。

secp256r1是OpenSSLprime256v1曲线。

然后使用以下命令从私钥创建证书:

openssl req -x509 -new -key ecdsa.key -out ecdsa.crt

 

使用多个键配置Tomcat

为了支持两种证书类型,可以将多个<Certificate>元素添加到<SSLHostConfig>元素中。 定义多个<Certificate>元素时,每个元素都必须具有唯一的类型属性。 RSA证书具有RSA类型,而ECDSA证书具有EC类型。

这是Tomcat server.xml配置文件的片段,其中包含使用上述OpenSSL命令创建的两个自签名证书和私钥。

<Connector SSLEnabled="true" port="62000" protocol="org.apache.coyote.http11.Http11AprProtocol">

    <SSLHostConfig>

        <Certificate certificateFile="${catalina.base}/conf/ecdsa.crt" certificateKeyFile="${catalina.base}/conf/ecdsa.key" type="EC"/>

        <Certificate certificateFile="${catalina.base}/conf/rsa.crt" certificateKeyFile="${catalina.base}/conf/rsa.key" type="RSA"/>

    </SSLHostConfig>

</Connector>

 

此代码段使用APR协议,该协议接受OpenSSL创建的PEM文件。 有关在Tomcat中启用APR的更多信息,请参见构建Apache可移植运行时。

验证配置

High-Tech Bridge提供了一项在线服务,用于验证Web服务器的安全性配置。

在此屏幕截图中,我们可以看到Tomcat服务器同时公开了RSA和ECDSA证书。

 

 

 

结论

Tomcat在为单个HTTPS端口同时支持RSA和ECDSA证书的能力方面非常独特。 这使Tomcat可以在不牺牲安全性的情况下向各种客户端提供HTTPS。 只需定义两个具有不同类型属性的<Connector>元素即可实现此配置。

> 喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
 > 如果你对java技术很感兴趣也可以交流学习,共同学习进步。 
> 不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代

文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章