背景:
因为https工作工程中使用很多次了,今天给国产机上的tomcat进行部署的时候,发现一个报错,提示配置的协议无效,故记录下处理方法,也记录下整个https的配置过程。
报错内容:
这个问题其实在window环境上部署的时候也出现过,windows环境上的解决方式是添加一个本地库tcnative-1.dll文件即可,文末获取,但是在Linux环境中,对应的文件不是则是.so文件,本文将讲述整个获取方式,以及windows上面配置的方式。
生成证书的方式此处不进行讲述,采用的是openssl进行生成证书的操作。
tcnative-1.dll下载:tcnative-1.dll
windows方式:
A)tomcat配置启用https。
配置tomcat/conf/server.xml,注释下图红框原有的访问方式,启用下图蓝框配置https访问的配置。(注意修改服务器证书和密钥的位置)
注意:SSLCertificateFile后面配置的路径为localhost.crt文件的实际路径,SSLCertificateKeyFile后面配置的路径为localhost.key文件的实际路径
<Connector port="9090" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" SSLCertificateFile="E://localhost.crt" SSLCertificateKeyFile="E://localhost.key" SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" />
B)Nginx配置启用https
在nginx/conf/nginx.conf中配置如下,即可启用https访问
server { listen 443 ssl; server_name 127.0.0.1; ssl_certificate localhost.crt; ssl_certificate_key localhost.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_dhparam dhparam.pem; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;
Linux配置:
linux使用nginx配置的话基本上是和windows是一样的配置,不需要单独处理什么,但是当使用tomcat的时候,配置一样的情况下就会出现如开始图片中的错误:无法解析
Http11AprProtocol协议的情况,参考网上说的意思:如下图:
此种方式的具体做法如下记录:
1.安装APR和OpenSSL:可以使用下面命令进行安装 yum install apr-devel openssl-devel 2.安装Tomcat-native:Tomcat-native的安装文件已经存在于Tomcat中,位于$CATALINA_HOME/bin的文件tomcat-native.tar.gz。你可以使用以下命令来解压并安装: tar xzcf tomcat-native.tar.gz cd tomcat-native-1.2.36-src/native ./configure make && make install eg:如果./configure报错,可执行 ./configure --with-apr=/usr/bin/apr-1-config 之后再执行下面的命令 安装完成后,会看到提示,标识已经安装到/usr/local/apr/lib中。 3.配置Tomcat的setenv.sh文件:切换到$CATALINA_HOME/bin目录下,编辑setenv.sh文件。在文件中添加以下行: LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib export LD_LIBRARY_PATH 如果你在Tomcat的bin目录下找不到setenv.sh文件,你可以手动创建一个。setenv.sh文件是用于设置Tomcat的环境变量,包括JVM选项、Tomcat选项等。
tomcat-nativa文件下载:tomcat-native.tar.gz
此处说明几个经常遇到的问题:
1、地方上服务器没有配置DNS,可能会造成https访问无效。
解决办法:提供证书的时候,需要配置DNS。
2.双协议配置:
<Connector port="9901" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxHttpHeaderSize="8192" URIEncoding="UTF-8" /> <Connector port="9001" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" SSLCertificateFile="d://https//localhost.crt" SSLCertificateKeyFile="d://https//localhost.key" SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" />
3.发现某些请求中因为一些特殊符号无法访问的问题
原因:tomcat版本高了,更加遵守规范,不再解析特殊字符
解决方法:可以在Connector配置中加上relaxedQueryChars="[]|{}^\`"<>"
<Connector port="9001" relaxedQueryChars="[]|{}^\`"<>" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" SSLCertificateFile="d://https//localhost.crt" SSLCertificateKeyFile="d://https//localhost.key" SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" />
4.ngnix1.11配置的内容
listen 8035 ssl; server_name localhost; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM+LOW:+SSLv2:+EXP; ssl_certificate E:/0-bdcdj6.1-biaozhun/httpcer/localhost.crt; ssl_certificate_key E:/0-bdcdj6.1-biaozhun/httpcer/localhost.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on;
标签:https,tomcat,ssl,配置,访问,Tomcat,Https,localhost From: https://www.cnblogs.com/ammyblog/p/17930489.html