如何使内网ip能够实现HTTPS访问
在公司内部网络研发过程中,是使用的内部服务器进行发布,因此访问的ip也是内部的ip。这时候如果想对应用采用https访问的话,就需要配置对应的证书,但是市面上的证书需要使用到域名,并且基本都是基于互联网进行的认证,这种场景,在实际内网环境下,就变得难受,既不方便切换https后的调试,也不方便验证是否https配置都能成功,基于上述的情况,想到在内部服务器上生成证书,并且证书的认证地址也指向到ip,经过查找相关资料,遇到同样问题的还不少,现给出经过实际验证可行的方法。
1.mkcert
mkcert是一个使用go语言编写的生成本地自签证书的小程序,具有跨平台,使用简单,支持多域名,自动信任CA等一系列方便的特性可供本地开发时快速创建https环境使用,其最新版本地址如下:https://github.com/FiloSottile/mkcert/releases/latest
根据内部服务器的操作系统类型下载对应的windows/Linux/arm版本即可,在本例中采用linux进行介绍。
首先从上述网址下,下载mkcert-v1.4.4-linux-amd64,然后上传到服务器并为其赋予权限
chmod +x mkcert-v1.4.4-linux-amd64
然后将mkcert文件移动到bin目录下
sudo cp mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
安装证书
mkcert -install
将生成的证书下载到需要访问该ip的pc机上备用
执行mkcert -CAROOT,得到证书的根目录,然后将该目录下的rootCA.pem文件下载
将可信ip写入,并生成对应的ssl证书,执行中可能会要求输入密码,需要记住该密码,后续配置https时会用到
mkcert localhost 127.0.0.1 ::1 192.168.1.99
好,执行到这里,我们需要的证书文件就准备妥了,下一步是配置对应的中间件所需要ssl证书文件。
2.tomcat
tomcat部署https服务需要jks文件,因此需要将生成的文件转换成jks文件,执行中可能会要求输入密码,需要记住该密码
openssl pkcs12 -export -inkey ./localhost+3-key.pem -in ./localhost+3.pem -name localhost+3 -out localhost+3.p12
keytool -importkeystore -srckeystore localhost+3.p12 -srcstoretype pkcs12 -destkeystore localhost+3.jks
将jks文件复制到tomcat的conf目录下
cp localhost+3.jks /apache/conf/
修改tomcat的server.xml文件配置,在默认端口下增加https访问的配置
<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" <!--jks文件路径--> keystoreFile="/projectTest/apache-tomcat-9.0.21/conf/localhost+3.jks" <!--jks文件密码--> keystorePass="jjjc2022" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256" />
重启服务即可。
3.nginx
nginx部署需要crt和key文件,因此也需要通过mkcert生成的文件来进行转换
openssl x509 -in localhost+3.pem -out localhost+3.crt
openssl rsa -in localhost+3-key.pem -out localhost+3.key
将生成的这两个文件,复制到nginx的conf目录下,并配置nginx.conf
重启nginx服务即可。
4.配置客户端访问pc
根据客户端pc的版本下载对应的mkcert文件,本例中采用windows的
将windows版的mkcert文件与从服务器下载rootCA.pem文件放在一起,然后新建一个bat文件,填入以下内容
@echo off set p=%~dp0 SETX CAROOT %p% && mkcert-V1.4.4-windows-amd64.exe -install pause
以管理员身份运行。
5.验证https访问
在访问之前,最好使用无痕模式访问