如何为无公网IP私有子网中的过期GitHub Enterprise Server续期TLS证书
无公网IP的GitHub Enterprise Server TLS证书续期方案(AWS私有子网场景)
因为你的GHES实例部署在私有子网且无公网IP,ACME服务器无法通过公网解析到它的A/AAAA记录,所以ghe-ssl-acme的HTTP-01验证会失败。以下是可行的解决方法:
方法一:使用DNS-01验证生成可信证书(推荐长期使用)
DNS-01验证不需要公网访问实例,仅需修改域名的DNS记录完成验证:
- 在有公网访问的机器(本地电脑或AWS公网EC2)上安装Certbot或其他支持DNS-01的ACME客户端
- 执行证书申请命令:
certbot certonly --manual --preferred-challenges dns -d your-ghes-domain.com - 按照提示在域名的DNS服务商处添加指定的TXT记录,等待ACME服务器验证完成后,会生成
fullchain.pem(证书链)和privkey.pem(私钥)文件 - 通过堡垒机/VPN等方式将证书文件上传到GHES实例的
/home/admin/目录 - 在GHES上安装证书并生效:
sudo -u admin ghe-ssl-certificate-install /home/admin/fullchain.pem /home/admin/privkey.pem sudo ghe-config-apply
方法二:搭建内部ACME服务器(适合企业内部环境)
如果你的环境有内部CA体系,可以自建内部ACME服务器(如Step CA),让GHES通过内部网络完成证书续期:
- 部署内部ACME服务器,确保GHES实例能通过私有网络访问该服务器
- 配置GHES指向内部ACME端点:
sudo ghe-config ssl.acme.server https://your-internal-acme-server-url - 重新执行ACME续期命令:
sudo -u admin /usr/local/bin/ghe-ssl-acme -p -i
方法三:生成自签名证书(临时应急)
若需快速恢复服务,可临时使用自签名证书(浏览器会提示不安全,仅作应急):
- 在GHES实例上生成自签名证书:
按提示填写信息,其中sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /home/admin/ghes.key -out /home/admin/ghes.crtCommon Name需填写你的GHES域名 - 安装并生效证书:
sudo -u admin ghe-ssl-certificate-install /home/admin/ghes.crt /home/admin/ghes.key sudo ghe-config-apply
内容的提问来源于stack exchange,提问作者Çağrı BIYIK
相关产品推荐
相关产品推荐

