Tomcat在Apr模式下的Https雙向認證
阿新 • • 發佈:2018-12-25
當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應該是指私鑰,這個東西從哪裡來呢,繼續找資料。
關鍵是這一段:
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的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需注意:
- 如果配置了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