当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