配置Https访问

发布时间 2023-12-28 11:27:41作者: 为了忘却的纪念丶

背景:

  因为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="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"

 <Connector
        port="9001"
        relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
        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;