外网如何通过https访问自己的服务
前情提要
最近在接wx小游戏的sdk, 消息推送需要在wx端配置https开头的地址。 我本地开了一个http服务,我的ip为192.168.40.39, 监听端口 8091。想要达到的效果是,外部浏览器输入 https://myproject.com/xx, 实际上会转成 http://192.168.40.39:8091/xx。 以下是我的解决办法
花生壳穿透
-
新注册送每月1G流量, 带宽 1Mbps, 两个映射
-
下载花生壳工具,注册账号, 登录
-
花生壳对外映射需要注册一个域名关联, 首次注册可能要付费6元,并且实名认证,得到一个关联本机的域名
-
点击自定义映射,可以有 tcp,udp,http, https, Socks5, 配置好 内网主机和内网端口
-
结束。 简单易上手, 嘎嘎好用
图1: 花生壳映射成功
证书+web服务器
.... 听说腾讯云、华为云、ZeroSSL、Let’s Encrypt可以薅到免费的可信任证书, 试试 😉
自签证书生成
- 下载openssl, 官网的是要收费的, 去下载破解版的吧
环境变量 > 系统变量 > Path > 编辑 > 添加OpenSSL 安装路径(比如C:\OpenSSL-Win64\bin)
// 为了能在cmd中输入 openssl 指令openssl genrsa -out private.key 2048
// 生成私钥 private.key 是生成的私钥文件名,可更改, 2048 是密钥长度,可调整openssl req -new -key private.key -out request.csr
// 生成证书签名请求文件(CSR), 会要求输入一堆信息,其他随便填。域名也许需要好好填?openssl x509 -req -days 365 -in request.csr -signkey private.key -out certificate.crt
// 使用生成的私钥和CSR文件, 生成一个自签名证书 -days 365:证书有效期为 365 天,可调整,certificate.crt 是生成的证书文件名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"))
}