在内网环境中为 Gogs 配置 HTTPS 访问

在内网环境中为 Gogs 配置 HTTPS 访问,虽然不需要公网域名,但仍需通过自签名证书或私有证书实现加密。以下是详细步骤和方案:


一、核心方案选择

方案 适用场景 优点 缺点
自签名证书 快速测试、临时使用 无需域名,快速生成 浏览器提示"不安全"
私有 CA 证书 企业内网统一管理 所有设备信任私有 CA,无警告 需维护私有 CA 基础设施
反向代理 HTTPS 集中管理多服务 HTTPS 统一证书管理,灵活配置 需部署反向代理(如 Nginx)

二、使用自签名证书配置 HTTPS

1. 生成自签名证书
复制代码
bash
# 生成私钥和证书(有效期365天)
openssl req -x509 -newkey rsa:4096 -nodes -keyout gogs.key -out gogs.crt -days 365 -subj "/CN=192.168.1.100"  # 替换为内网IP或主机名
2. 配置 Gogs 使用 HTTPS

编辑 Gogs 配置文件 custom/conf/app.ini

复制代码
[server]
DOMAIN           = 192.168.1.100  # 内网IP或主机名
HTTP_PORT        = 3000
ROOT_URL         = https://192.168.1.100/  # 必须使用 HTTPS
PROTOCOL         = https
CERT_FILE        = /path/to/gogs.crt  # 证书路径
KEY_FILE         = /path/to/gogs.key  # 私钥路径
3. 重启 Gogs 服务
复制代码
sudo systemctl restart gogs
4. 客户端信任自签名证书
  • Windows :双击 .crt 文件,选择"安装证书" → "本地计算机" → "受信任的根证书颁发机构"。

  • Linux

    bash

    复制代码
    sudo cp gogs.crt /usr/local/share/ca-certificates/
    sudo update-ca-certificates

三、通过反向代理实现 HTTPS(推荐)

1. 使用 Nginx 反向代理
  1. 生成自签名证书(同上)。

  2. 配置 Nginx(示例):

    复制代码
    server {
        listen 443 ssl;
        server_name 192.168.1.100;  # 内网IP或主机名
    
        ssl_certificate /path/to/gogs.crt;
        ssl_certificate_key /path/to/gogs.key;
    
        location / {
            proxy_pass http://127.0.0.1:3000;  # 转发到 Gogs 的 HTTP 端口
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
  3. 重启 Nginx

    复制代码
    sudo systemctl restart nginx
2. 调整 Gogs 配置

确保 ROOT_URL 与反向代理地址一致:

复制代码
[server]
ROOT_URL = https://192.168.1.100/  # 与 Nginx 的 server_name 一致
PROTOCOL = http  # Gogs 本身运行 HTTP,由 Nginx 处理 HTTPS

四、使用私有 CA 证书(企业级方案)

1. 创建私有 CA
复制代码
# 生成 CA 私钥和根证书
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/CN=My Internal CA"
2. 签发 Gogs 证书
复制代码
# 生成证书请求
openssl req -newkey rsa:4096 -nodes -keyout gogs.key -out gogs.csr -subj "/CN=192.168.1.100"

# 使用 CA 签发证书
openssl x509 -req -in gogs.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out gogs.crt -days 365
3. 配置 Gogs 或反向代理
  • gogs.crtgogs.key 配置到 Gogs 或 Nginx(参考上文步骤)。

  • 在所有客户端安装 ca.crt 到受信任的根证书颁发机构。


五、验证 HTTPS 访问

  • 浏览器访问 :打开 https://192.168.1.100,确认无安全警告。

  • CURL 测试

    复制代码
    curl -k https://192.168.1.100  # 忽略证书验证(测试用)
    curl --cacert /path/to/ca.crt https://192.168.1.100  # 使用私有 CA 验证

六、常见问题解决

  1. 浏览器提示"不安全"

    • 自签名证书需手动信任(安装到系统根证书)。

    • 私有 CA 证书需提前部署到所有客户端。

  2. Gogs 页面资源加载失败

    检查 ROOT_URL 是否配置为 HTTPS,避免混合 HTTP/HTTPS 内容。

  3. 端口冲突

    • 确保 Nginx 或 Gogs 未占用相同端口(如 443)。

    • 开放防火墙:

      复制代码
      sudo ufw allow 443/tcp

七、优化建议

  • 自动化证书管理 :使用 mkcert 工具快速生成本地可信证书:

    复制代码
    mkcert 192.168.1.100  # 自动生成浏览器信任的证书
  • 强制 HTTPS 跳转:在 Nginx 中配置 80 端口重定向:

    复制代码
    server {
        listen 80;
        server_name 192.168.1.100;
        return 301 https://$host$request_uri;
    }

通过上述方法,即使在内网无公网域名的情况下,也能为 Gogs 实现安全的 HTTPS 访问。根据实际需求选择自签名证书、私有 CA 或反向代理方案。

相关推荐
桃花键神15 小时前
Undetectable接入亮数据代理IP深度测评:高效、稳定、适配性极强的海外多账号运营利器
网络协议·tcp/ip·php
野生技术架构师17 小时前
原来可以搭建一个HTTP服务
网络·网络协议·http
北京耐用通信21 小时前
耐达讯自动化CANopen转Profibus网关:为风力发电场打造高可靠协议转换解决方案
人工智能·物联网·网络协议·自动化·信息与通信
北京耐用通信21 小时前
耐达讯自动化CANopen转Profibus 网关:实现光伏逆变器无缝接入工业以太网的技术解析
网络·人工智能·物联网·网络协议·自动化·信息与通信
..过云雨21 小时前
应用层自定义协议与序列化一站式指南
网络协议·tcp/ip·json·信息与通信
TOPGUS21 小时前
谷歌Chrome浏览器即将对HTTP网站设卡:突出展示“始终使用安全连接”功能
前端·网络·chrome·http·搜索引擎·seo·数字营销
Wadli21 小时前
项目5 |HTTP服务框架
网络·网络协议·http
CCPC不拿奖不改名21 小时前
网络与API:HTTP基础+面试习题
网络·python·网络协议·学习·http·面试·职场和发展
乾元21 小时前
无线定位与链路质量预测——从“知道你在哪”,到“提前知道你会不会掉线”的网络服务化实践
运维·开发语言·人工智能·网络协议·重构·信息与通信
切糕师学AI21 小时前
SSL是什么?
网络协议