外网如何通过https访问自己的服务

前情提要

最近在接wx小游戏的sdk, 消息推送需要在wx端配置https开头的地址。 我本地开了一个http服务,我的ip为192.168.40.39, 监听端口 8091。想要达到的效果是,外部浏览器输入 https://myproject.com/xx, 实际上会转成 http://192.168.40.39:8091/xx。 以下是我的解决办法

花生壳穿透

  1. 新注册送每月1G流量, 带宽 1Mbps, 两个映射

  2. 下载花生壳工具,注册账号, 登录

  3. 花生壳对外映射需要注册一个域名关联, 首次注册可能要付费6元,并且实名认证,得到一个关联本机的域名

  4. 点击自定义映射,可以有 tcp,udp,http, https, Socks5, 配置好 内网主机和内网端口

  5. 结束。 简单易上手, 嘎嘎好用

         图1: 花生壳映射成功
    

证书+web服务器

.... 听说腾讯云、华为云、ZeroSSL、Let’s Encrypt可以薅到免费的可信任证书, 试试 😉

自签证书生成

  1. 下载openssl, 官网的是要收费的, 去下载破解版的吧
  2. 环境变量 > 系统变量 > Path > 编辑 > 添加OpenSSL 安装路径(比如C:\OpenSSL-Win64\bin) // 为了能在cmd中输入 openssl 指令
  3. openssl genrsa -out private.key 2048 // 生成私钥 private.key 是生成的私钥文件名,可更改, 2048 是密钥长度,可调整
  4. openssl req -new -key private.key -out request.csr // 生成证书签名请求文件(CSR), 会要求输入一堆信息,其他随便填。域名也许需要好好填?
  5. openssl x509 -req -days 365 -in request.csr -signkey private.key -out certificate.crt // 使用生成的私钥和CSR文件, 生成一个自签名证书 -days 365:证书有效期为 365 天,可调整,certificate.crt 是生成的证书文件名
  6. openssl x509 -in certificate.crt -text -noout // 查看证书详细信息

web服务器

  • [ Apache ]
  • [ Nginx ]
  • [ IIS ]

Apache

需要安装下载 Apache, 配置文件(httpd.conf 或 httpd-ssl.conf),启动完成

Nginx

需要安装下载nginx, 配置好 nginx.conf, 启动完成

IIS

IIS 是windows自带的模块,打开并配置,启动完成

1.确保安装IIS

   1. 打开 控制面板>程序和功能>启用或关闭Windows功能
   2. 勾选 **Internet Information Services**, 并确保安装了 **Web管理工具和Web核心服务**

2.导入证书到 IIS

  1. 将.crt 和 .key 转换为 .pfx文件。 cmd 运行以下命令 `openssl pkcs12 -export -out certificate.pfx -inkey private.key -in certificate.crt`;  按提示设置导出密码
  2. 打开 IIS, 左侧选择**服务器节点**, 双击 **服务器证书**, 点击右侧的**导入**, 在弹出的窗口中,选择.pfx 文件, 输入转换.pfx 文件时设置的密码, 证书存储选择**个人**, 点击确定完成导入

3. 绑定 https 到网站

3.1.安装 IIS URL Rewrite 模块和 ARR 模块, 并启用
1. 搜索  IIS Url Rewrite, 下载安装包, 安装完成后重启IIS 管理器。   官网链接: https://www.iis.net/downloads/microsoft/url-rewrite 
2. 搜索  IIS ARR,  下载安装包, 安装完成后重启iis管理器。 官网链接: https://www.iis.net/downloads/microsoft/application-request-routing
3. 启用 ARR 的反向代理功能, 打开 IIS 管理器左侧, 点击服务器节点, 点击右侧 【**应用程序请求路由缓存**】, 右侧操作窗口中, 点击 【**服务器代理设置**】,勾选 【**启用代理**】, 点击 【**应用**】
4. 配置完成后, 重新打开IIS管理器, 右侧会出现 URL Rewrite 选项, 双击此选项, 检查能否添加规则
3.2. IIS管理器 配置
1. win键输入IIS,打开 (IIS 全名 internet information services)
2. 在左侧选择 【**Default Web Site**】, 右键选择【**编辑绑定**】, 点击【**添加**】, 类型选择 https(还有http和ftp可选), SSL证书选择导入的自签名证书。 见图2
3. 双击 【**URL Rewrite**】, 点击右侧 【**添加规则**】,选择 【**反向代理**】, 点击 【**确定**】, 入站规则, 目标服务器填写为127.0.0.1:8091, 勾选 【**启用SSL代理**】, 点击应用, 见图3
4. 测试结果见图4

         图2: 网站绑定配置

         图3:URL Rewrite 配置 

         图4: 最终结果   用 https://192.168.40.39 访问, 只能内网访问。 外网访问的话需要域名, 我没有域名,等我再去研究一下

tips

开启8091的httpserver, go 代码如下
func main() {
	wg := sync.WaitGroup{}
	wg.Add(1)
	//prepare(&wg)
	prepareBrief(&wg)
	wg.Wait()
}

// prepareBrief 极简版http 强烈推荐, 既可以接受客户端的任何形式 (Get\Post...)
func prepareBrief(wg *sync.WaitGroup) {
	http.HandleFunc("/everything", HandleEveryThing)
	go func() {
		if err := http.ListenAndServe(common.ServerListen, nil); err != nil {
			wg.Done()
			panic(err)
		}
	}()
}
func HandleEveryThing(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("congratulation! you  did it"))
}

posted @ 2024-11-21 18:58  玉面蛟龙  阅读(23)  评论(0编辑  收藏  举报