Tomcat在Apr模式下的Https双向认证

当tomcat使用Apr模式的时候,如果按照老方法配置https:

控制台会出现如下错误

Connector attribute SSLCertificateFile must be defined when using SSL with APR

直接Google,很多答案都是不启用APR,但这样做将失去APR库的价值,Tomcat性能必然下降。

让我们打开Tomcat的文档webapps/docs/apr.html,其中讲到

 <Connector port="443" maxHttpHeaderSize="8192"
                 maxThreads="150"
                 enableLookups="false" disableUploadTimeout="true"
                 acceptCount="100" scheme="https" secure="true"
                 SSLEnabled="true"
                 SSLCertificateFile="${catalina.base}/conf/localhost.crt"
                 SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />

SSLCertificateFile属性好理解,是指证书文件,就是用keytool导出的那个。

而SSLCertificateKeyFile应该是指私钥,这个东西从哪里来呢,继续找资料。

在这里:http://stackoverflow.com/questions/150167/how-do-i-list-export-private-keys-from-a-keystore

关键是这一段:

keytool -importkeystore -srckeystore keystore.jks \
    -destkeystore intermediate.p12 -deststoretype PKCS12

Next, use OpenSSL to do the extraction to PEM:

openssl pkcs12 -in intermediate.p12 -out extracted.pem -nodes

先把keystore转换为pkcs12格式,然后使用openssl工具导出私钥即可。

PS:上面描述的可能不是很清楚。

这里给出完整的流程:

1、配置自签名证书

自签名证书配置教程

然后tomcat的server.xml是这样配置的

tomcat7配置如下:(tomcat8/9有所不同)
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS"
               keystoreFile="server.p12" keystorePass="changeit" keystoreType="PKCS12" 
               truststoreFile="truststore.jks" truststorePass="222222" truststoreType="JKS"/>

2、更改为Apr模式

参照教程tomcat配置Apr

然后tomcat的server.xml

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS"
              SSLCertificateFile="server-cert.pem"
                 SSLCertificateKeyFile="server-key.pem" />

就可以了,https+apr配置完成

3、配置了Apr的同时,如果需要以非ROOT方式启动tomcat需注意:

  • 非ROOT方式启动tomcat教程:https://www.cnblogs.com/Tielong/p/5422599.html
  • 如果配置了Apr模式,注意在上一步中创建tomcat用户时useradd tomcat -M -d / -s /usr/sbin/nologin,不能设置为notlogin,初步猜测是因为安装APR时更改了/etc/profile系统环境变量,未登录的user读取不了,所以启动tomcat会提示找不到apr,解决方案是tomcat用户设为可登录,或者直接修改daemon.sh,把环境变量添加到最上边,环境变量是:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

猜你喜欢

转载自blog.csdn.net/wokuailewozihao/article/details/81666215
今日推荐