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

相关推荐
工控小楠2 小时前
DeviceNet转Modbus TCP网关的远程遥控接收端连接研究
网络·网络协议·devicenet·profient
midsummer_woo4 小时前
【2025年】解决Burpsuite抓不到https包的问题
网络协议·http·https
光芒Shine5 小时前
【物联网-TCP/IP】
网络·网络协议·tcp/ip
小白杨树树7 小时前
【WebSocket】SpringBoot项目中使用WebSocket
spring boot·websocket·网络协议
云计算-Security7 小时前
如何理解 IP 数据报中的 TTL?
网络协议·tcp/ip
itachi-uchiha8 小时前
命令行以TLS/SSL显式加密方式访问FTP服务器
服务器·网络协议·ssl
稳联技术9 小时前
实践提炼,EtherNet/IP转PROFINET网关实现乳企数字化工厂增效
网络·网络协议·tcp/ip
Icoolkj9 小时前
WebRTC 与 WebSocket 的关联关系
websocket·网络协议·webrtc
红米饭配南瓜汤9 小时前
WebRTC中的几个Rtp*Sender
网络·网络协议·音视频·webrtc·媒体
猫头虎12 小时前
[特殊字符]解决 “IDEA 登录失败。不支持早于 14.0 的 GitLab 版本” 问题的几种方法
java·ide·网络协议·http·https·gitlab·intellij-idea