在内网环境中为 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 或反向代理方案。

相关推荐
【云轩】7 小时前
《信使传奇:TCP与UDP的互联网使命》
网络协议·tcp/ip·udp
五行星辰7 小时前
Java HttpURLConnection修仙指南:从萌新到HTTP请求大能的渡劫手册
java·开发语言·http
小徐Chao努力8 小时前
【计网】TCP 协议详解 与 常见面试题
网络协议·tcp/ip·php
听风说雨的人儿8 小时前
浅谈在HTTP中GET与POST的区别
网络·网络协议·http
无名之逆10 小时前
在Rust生态中探索高性能HTTP服务器:Hyperlane初体验
运维·服务器·开发语言·后端·http·rust·自动化
[email protected]11 小时前
ASP.NET Core Web API 中 HTTP状态码的分类及对应的返回方法
http·asp.net·.netcore
小徐Chao努力12 小时前
【计网】HTTP协议 1.0/1.1/2.0详解
网络·网络协议·http
了不起的码农12 小时前
几种常见的HTTP方法之GET和POST
网络·网络协议·http
编码小笨猪13 小时前
[ 计算机网络 ] | HTTP协议(一)
网络·计算机网络·http
车载测试工程师13 小时前
SOMEIP通信矩阵解读
服务器·网络·经验分享·网络协议·车载系统