老E的博客

  • 首页
  • 关于
  • 技术应用
    • VPS相关
    • AI相关
    • 盒子相关
    • 其他
  • 订阅Youtube频道
  • 网络加速
    • expressvpnNo.1 ExpressVPN
    • 最佳免费VPN-PrivadoVPN
    • NordVPN
    • 廉价王者-Surfshark
    • PrivateInternetAccess
    • 解锁一切-PrivateVPN
  • 公益资源
    • AI导航
    • 工具下载
    • Docker镜像加速
  • 友情链接
    • tickcloudTickcloud
老E的博客
专注记录并分享跨境技术应用及随想
  1. 首页
  2. 技术应用
  3. VPS相关
  4. 正文

使用acme安装证书开启HTTPS支持

2023年6月23日 1434次阅读 0条评论
clawcloud
expressvpn best vpn
privado vpn
surfshark vpn
private vpn
pia vpn
nord vpn

1.生成并获取证书

1.1 下载、安装acme.sh

点击「此处」至acme github仓库。acme考虑到国内网络环境,可能无法访问github,可直接从gitee拉取仓库。

#curl https://get.acme.sh | sh
#curl https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m xxx@example.com
source .bashrc

1.2 证书生成获取方式一:http方式(更适用于VPS)

HTTP方式下,CA机构将通过向网站写入文件的方式以验证网站属权,通过验证后颁发证书。结合VPS/主机所处网络环境及自身软件包安装情况,有可能在使用standalone模式时需要安装socat并赋权。

同时,在网络受限、避免改动安全策略/组规则、80端口被占用等3种情况下,可使用--httpport指定端口。acme可以即时模拟/仿冒一个站点,以供CA机构写入文件并验证使用。

apt install socat
setcap 'cap_net_bind_service=+ep' /usr/bin/socat

acme.sh --issue -d example.eu.org -d *.example.eu.org --standalone
#acme.sh --issue -d example.eu.org -d *.example.eu.org --standalone --httpport 6789

需要说明的是,-w指定的目录可自定义,同时可通过-d参数添加泛域名在内的多个域名。对于内网主机(包括盒子)使用http方式硬上,建议xxxxxx.eu.org保持与已有动态AAAA记录名称(fulldomainname)一致,可避免因为没有配置相应记录导致解析失败而“短暂失联”。

1.3 证书生成获取方式二:dns方式(更适用于内网主机)

DNS方式下,CA机构将通过向DNS域写入txt类型记录的形式以验证域属权,通过验证后颁发证书。acme目前默认CA使用zeroSSL,老E习惯改用Let's Encrypt。

export CF_Email="XXX@example.com"
export CF_Key="api_key"
acme.sh --server letsencrypt --issue --dns dns_cf -d example.com

1.4 更简单的额外选择

可以使用以下在线辅助页面申请(本人未测试,开源网页版acme客户端)。

https://github.com/xiangyuecn/ACME-HTML-Web-Browser-Client

2.安装证书

至此,我们可以使用acme.sh安装证书,默认情况下需要注意两点:

  • pem公钥需要使用fullchain-file,而非以域名为前缀命名的文件
  • 如果nginx以docker方式安装加载,证书安装目录的选择要考虑映射关系
acme.sh --installcert -d example.eu.org --key-file /home/dockers/nginx/conf/example.eu.org.key  --fullchain-file /home/dockers/nginx/conf/example.eu.org.pem

3.nginx配置

系统未作其他特殊配置的情况下,可直接拷贝server段添加至nginx.conf文件中并使用 -s reload加载。

server {
  listen 3355 ssl;
  server_name example.eu.org;

  ssl_certificate /etc/nginx/conf/example.eu.org.pem;  #公钥位置及挂载映射关系
  ssl_certificate_key /etc/nginx/conf/example.eu.org.key;  #私钥位置及挂载映射关系

  location / {
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_pass http://localhost:8080/;  #此处仍以反向代理go-proxy-bingai为例

     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "Upgrade";
   }
}

4.验证

老E修改(增加)了挂载映射关系,因此对现有容器myginx进行了删除,并重新创建加载。由于证书文件安装到位后,需要确保nginx容器能正常加载对应的映射目录中找到并加载证书,添加映射关系是不可避免的。

docker stop mynginx
docker rm -f mynginx

#docker run -d -p 8080:8080 --name go-proxy-bingai --restart=unless-stopped adams549659584/go-proxy-bingai   #已正常加载可不做处理

docker run --name mynginx --net host \
  -v /home/dockers/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
  -v /home/dockers/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf \
  -v /home/dockers/nginx/html:/usr/share/nginx/html \
  -v /home/dockers/nginx/log:/var/log/nginx \
  -v /home/dockers/nginx/conf:/etc/nginx/conf -d nginx

重新创建加载mynginx容器后,即可在浏览器中以https方式访问相应服务,原系统对外的http服务可与https服务共存。

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
标签: acme Linux系统运维 nginx 证书
最后更新:2024年6月2日

老E

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

站内搜索
归档
  • 2025 年 5 月
  • 2025 年 4 月
  • 2025 年 3 月
  • 2025 年 2 月
  • 2025 年 1 月
  • 2024 年 12 月
  • 2024 年 11 月
  • 2024 年 10 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 7 月
  • 2024 年 6 月
  • 2024 年 5 月
  • 2024 年 4 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2024 年 1 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 10 月
  • 2023 年 9 月
  • 2023 年 8 月
  • 2023 年 7 月
  • 2023 年 6 月

Copyright ©2023-2025 Appscross. All Rights Reserved.