在内网环境中为 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 分钟前
Node.js-http模块
网络协议·http·node.js
-qOVOp-4 小时前
408第三季part2 - 计算机网络 - ip分布首部格式与分片
网络协议·tcp/ip·计算机网络
数通Dinner4 小时前
RSTP 拓扑收敛机制
网络·网络协议·tcp/ip·算法·信息与通信
G等你下课9 小时前
AJAX请求跨域问题
前端·javascript·http
qq_1715388511 小时前
TCP/IP协议精解:IP协议——互联网世界的邮政编码系统
网络·网络协议·tcp/ip
兮动人11 小时前
获取终端外网IP地址
java·网络·网络协议·tcp/ip·获取终端外网ip地址
用户87621910624512 小时前
【计算机网络】HTTP 版本
http
拾光拾趣录12 小时前
无状态协议下的用户状态管理:Web应用如何保持用户登录态
前端·http·https
摘星编程12 小时前
深入理解责任链模式:从HTTP中间件到异常处理的实战应用
http·设计模式·中间件·责任链模式·实战应用
海外空间恒创科技13 小时前
一台香港原生ip站群服务器多少钱?
服务器·网络协议·tcp/ip