记录搭建一台可域名访问的HTTPS服务器

news2024/10/6 19:15:16

一、背景

        近期公司业务涉及到微信小程序,即将开发完成需要按照微信小程序平台的要求提供带证书的域名请求服务器。

        资源背景介绍如下:

        1、域名

        公司已有一个二级域名,再次申请新的二级域名并且实现ICP备案不仅需要花重金重新购买,还需要等待备案将近一个月。于是决定借用已有的二级域名将请求绑定到443以外的端口,理想的最终访问形式为:https://erp.aikes.com:8066/xxx/xxx.html(微信小程序也支持该种配置)

        2、证书

        公司的二级域名上已经绑定证书,新部署的服务也需要有SSL证书认证,否则https请求无法通过。有背景一的担保,该服务复用证书亦是可行的。

        3、代理

        为安全起见,新部署的服务不再使用线上正在跑的服务器,仅通过代理将请求转发到新的服务器。我们将微信小程序涉及到的资源文件及后端服务部署到新服务器即可。

二、正文

        正文中将分为几个部分进行操作记录,尽可能完整的复述当时出现的问题已经整改方案

1、代理和证书的纠葛

        关于代理的使用,和同事沟通后初步拟定了两种方案:1、通过Nginx代理;2、通过netsh实现TCP端口转发。

        出于安全性以及独立性考虑,尽可能小的影响线上服务器的情况下选择了Nginx进行代理,完整流程:监听目标端口,配置SSL证书,转发请求到目标服务器。

        以下是Nginx的配置文件 nginx.conf,证书文件放到同级的conf目录即可:

worker_processes 5;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay    on;

    keepalive_timeout  65;

    client_body_buffer_size 100m;
    client_max_body_size 100m;

    # HTTPS server
    server {
        listen 8066 ssl;
        server_name erp.aikes.com;

        ssl_certificate      cert/erp_aikes_com_integrated.crt;
        ssl_certificate_key  cert/erp_aikes_com.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_pass https://192.168.10.236:8066;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_connect_timeout 60;
            proxy_read_timeout 300;
            proxy_send_timeout 300;
        }
    }
}

        上述转发的配置中,跳转到内网的10.236机器正是我们新申请的服务器,8066端口为Tomcat使用,此处配置为https请求的话,Tomcat中也需要增加SSL证书实现https协议。

        也可以将其配置为http,则Tomcat也不需要增加证书。整个客户端请求的证书认证在Nginx端已经处理完毕。

        以下是新服务器(10.236:8066)上Tomcat增加SSL证书配置 server.xml (核心部分):

    <Connector executor="tomcatThreadPool"
               port="1001" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
    <Connector port="8066" protocol="org.apache.coyote.http11.Http11Nio2Protocol" maxThreads="150" SSLEnabled="true"
        scheme="https"
        secure="true"
        keystoreFile="conf/erp_aikes_com.jks"
        keystoreType="JKS"
        keystorePass="cT6W2buDs4LEbKMV"
        clientAuth="false"
        SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3"	/>

        上述Tomcat配置中需要将生成的jks证书放到同级conf目录下,笔者除了8066的 https 端口还额外开放了1001的http端口用于前端调试。

        PS:需要注意的是,如果Tomcat服务集成到了windows服务中,在变动证书配置后需要将服务卸载重新装载到windows services才会生效,这是一个大坑,笔者调试一下午一直以为是证书不对,结果偶然点了startup.bat启动后正常了,进而才发现是services中配置未生效导致。

2、证书和域名的关系

        通过上述配置,整个流程已经可以跑同,通过域名+端口+路由可以访问到我们目标服务器的目标服务上。

        此时记录一个域名访问的小知识,我们的证书申请是通过域名进行绑定的,所以证书生效的前提是通过域名访问。如果使用域名背后的真是IP进行https访问仍会提示网站不安全。

        所以,证书的世界是因为有域名而多姿多彩,没有域名的访问,证书一律不认可。

3、域名和代理的清白

        域名可以作为IP的别称,而代理只是作为不同IP的相同或不同端口之间的请求转发,所以一定程度上来看,域名和代理是清清白白没有任何关系。

        在上述配置中使用Nginx进行端口代理,最终效果使用域名访问时,会先通过DNS解析到具体IP,然后请求到IP+端口后发现是一个代理,进而通过代理跳转到真实服务器,获取请求结果返回客户端。

        此时需要记录下代理的调整。在实际使用中并没有按照Nginx进行代理,而是采用了Windows服务器自带的netsh命令实现了TCP端口转发,其原因有二:1、Nginx体量过大,不适合单纯的请求转发;2、线上服务器使用Nginx频繁出现502请求异常,系Nginx关于请求转发的超时配置等问题。

        所以最终决定使用netsh进行转发,此时担心的另一个问题出现:netsh需不需要携带SSL证书转发。查阅资料显示,netsh仅转发请求,目标服务器处理证书认证也是可以的。

        具体netsh使用指南可以查看笔者另一篇博客:Windows服务器基于netsh命令实现请求转发

        于是最终方案为:域名+端口+路由访问——>线上服务器netsh实现请求跳转——>目标服务器接收https请求并验证SSL证书——>处理请求将数据返回客户端浏览器

三、总结

        在配置微信小程序涉及的资源文件和后端服务时,域名和代理的关系是相对独立且清晰的。域名在网络中充当IP地址的别称,而代理则是在不同IP或不同端口之间进行请求转发的工具。在实际操作中,通过Nginx进行端口代理可以有效实现请求的转发和SSL证书的管理,但考虑到服务器性能和稳定性,有时会选择使用Windows服务器自带的netsh命令来进行TCP端口转发。

        关于域名,它的重要性在于SSL证书的有效性和安全性。SSL证书通常通过域名来绑定,只有通过正确的域名访问才能确保HTTPS连接的安全性,否则会出现浏览器提示网站不安全的情况。因此,域名在HTTPS访问中扮演了关键角色。

        总结来说,域名和代理在微信小程序开发中的应用各有其重要性和功能,通过合理的配置和管理,可以确保系统的安全性和稳定性,提供良好的用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1889498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入浅出:进程管理的艺术

目录 进程的定义 进程的特征 进程的状态 进程与程序的区别 进程的控制和管理 进程的特点 1. 虚拟内存空间的分配 2. 时间片轮转调度 图解&#xff1a; 进程段 数据段&#xff08;Data Segment&#xff09; 正文段&#xff08;Text Segment&#xff09; 堆栈段&…

十二、【源码】Spring整合AOP

源码地址&#xff1a;https://github.com/spring-projects/spring-framework 仓库地址&#xff1a;https://gitcode.net/qq_42665745/spring/-/tree/12-spring-aop Spring整合AOP 核心类&#xff1a; DefaultAdvisorAutoProxyCreator&#xff1a;用于在Spring框架中自动为符…

华为交换机基本命令配置(创建vlan、配置telnet登录)

<HUAWEI>system-view 进入系统视图 [HUAWEI]sysname SW1 交换机命名为SW1 [SW1]undo info-center enable 关闭消息中心 [SW1]quit 退出当前视图 <SW1>display vlan 查看vlan详情 <SW1>system-view 进入系统视图 [SW1]vlan 5 …

帮找Java Bug,面试,项目,解决Java问题

本人是个Java老程序员&#xff0c;如果你有解决不了的问题&#xff0c;或者面试的时候需要人帮助&#xff0c;或者求职就业上任何问题都可以联系我&#xff0c;下面是我微信&#xff0c;欢迎联系我&#xff01;

慧哥Saas充电桩开源平台 V2.5.5

文章目录 原地址&#xff1a;https://gitee.com/chouleng/cdzkjjh&#xff0c;更换新的地址如下 [点击此链接 https://gitee.com/chouleng/huili-cloud](https://gitee.com/chouleng/huili-cloud)一、产品功能部分截图1.手机端&#xff08;小程序、安卓、ios&#xff09;2.PC端…

豪车视频改字,节假日祝福视频改字小程序制作搭建开发

目录 前言&#xff1a; 一、视频改字小程序功能介绍 二、怎么对短视频模板进行改字&#xff1f; 三、这个短视频改字的项目怎么样&#xff1f; 总结&#xff1a; 前言&#xff1a; 现在很多豪车改字的短视频&#xff0c;节假日祝福的小视频&#xff0c;有不少直播在弄这个…

【Java学习笔记】java图形界面编程

在前面的章节中&#xff0c;我们开发运行的应用程序都没有图形界面&#xff0c;但是很多应用软件&#xff0c;如Windows下的Office办公软件、扑克牌接龙游戏软件、企业进销存ERP系统等&#xff0c;都有很漂亮的图形界面。素以需要我们开发具有图形界面的软件。 Java图形界面编程…

一篇文章入门主成分分析PCA

文章目录 基本概念事件随机变量独立同分布离散型随机变量伯努利分布&#xff08;两点分布&#xff09;二项分布几何分布泊松分布 连续型随机变量正态分布 期望方差标准化协方差相关系数线性组合特征值和特征向量特征值分解对称矩阵的特征值分解 齐次线性方程组单位向量基向量矩…

彻底掌握页面白屏检测

前言 在日常的前端开发中&#xff0c;白屏几乎是每个前端开发者都会遇到的问题。白屏问题严重影响了用户体验。当用户访问一个页面时&#xff0c;如果页面长时间处于白屏状态&#xff0c;用户可能会认为页面出现了问题&#xff0c;从而选择离开。这对于任何一个网站都是不利的…

为什么要在成像应用中使用图像采集卡?

达到最大产量是工业和工厂自动化的关键标准之一。提高传感器分辨率和帧速率有助于实现这一目标&#xff0c;但也使带宽达到极限&#xff0c;并提出了新的传输问题。当前高带宽接口(如10GigE、相机直接与PC连接和嵌入式系统)的实现促使成像应用的许多用户询问如何以最佳配置最优…

idea部署war包成功,但是接口404

场景 项目结构 xxx-xxx-app xxx-xxx-service xxx-xxx-webappapp/webapp依赖service&#xff0c;service中写了各种api&#xff0c;先别管它合不合理&#xff0c;正式环境用webapp发布。 本地配置tomcat启动&#xff0c;但是发现每次部署成功&#xff0c;但是service中的接口…

常见的九种二极管

常见的九种二极管 文章目录 常见的九种二极管1、普通二极管2、光电二极管&#xff08;LED&#xff09;3、变容二级管4、发光二极管5、恒流二极管6、快恢复二极管&#xff08;FRD&#xff09;7、肖特基二极管8、瞬态电压抑制二极管(TVS)9、齐纳二极管&#xff08;稳压&#xff0…

声音音频文件波谱可视化展示

1、简单图形展示 import matplotlib.pyplot as plt import numpy as np import torch import torchaudiodef plot_waveform(waveform, sample_rate, title"Waveform", xlimNone, ylimNone):waveform waveform.numpy()num_channels, num_frames waveform.shapetime…

基于用户的协同过滤算法

目录 原理&#xff1a; 计算相似度&#xff1a; 步骤&#xff1a; 计算方法&#xff1a;Jaccard相似系数、余弦相似度。 推荐 原理&#xff1a; 先“找到相似用户”&#xff0c;再“找到他们喜欢的物品”--->人以群分。即&#xff0c;给用户推荐“和他兴趣相似的其他用…

selenium,在元素块下查找条件元素

def get_norms_ele_text(self):elementsself.get_norms_elements()locBy.CSS_SELECTOR,"div.sku-select-row-label"by loc[0] # 获取By类型&#xff0c;例如By.CSS_SELECTORvalue loc[1] # 获取具体的CSS选择器字符串&#xff0c;例如"div.sku-select-row-l…

【C++】vector的底层原理及实现

文章目录 vector的底层结构迭代器容量操作size()capacity()reserve()resize() 默认成员函数构造无参构造函数带参构造函数 析构拷贝构造赋值重载 operator[ ]插入删除操作insert()任意位置插入erase()任意位置删除push_back()尾插pop_back()尾删 vector的底层结构 我们的目的不…

数据万象推出智能检索MetaInsight,现已开启限时公测

海量文件的分析统计一直是对象存储COS的热点需求&#xff0c;伴随AIGC飞速迭代发展&#xff0c;在众多不同模态素材的海洋中&#xff0c;用户也急需更高效地管理和利用多媒体内容&#xff0c;打破传统搜索的桎梏。 数据万象推出的智能检索 MetaInsight 服务将多模态检索与元数…

第十四章 Qt绘图

目录 一、Qt绘图基础 1、主要的类 2、paintEvent 事件 二、坐标体系 三、画笔 1、画笔的常用接口 2、画笔样式 3、画笔画线时的端点样式 4、画笔画线时,连接点的样式 5、实例 四、画刷 1、画刷的填充样式 2、实例 五、基本图形的绘制 1、画矩形 drawRect 2、画…

miniconda3 安装jupyter notebook并配置网络访问

由于服务器安装的miniconda3&#xff0c;无jupyter notebook&#xff0c;所以手工安装jupyter notebook 1 先conda 安装相关包 在base 环境下 conda install ipython conda install jupyter notebook 2 生成配置文件 jupyter notebook --generate-config Writing defaul…

Coze终于顶不住了?开始收费了

&#x1f914;各位老铁都知道&#xff0c;之前Coze以免费出圈&#xff0c;香碰碰&#xff0c;字节一个月几个亿补贴用户。现在终于顶不住了&#xff0c;开始收费了&#xff01; 我们来看看具体情况吧&#xff01; &#x1f4b8;收费情况一览 目前国内版本还没有开始收费&#x…