设为首页 加入收藏

TOP

Docker使用 linuxserver/letsencrypt 生成SSL证书最全解析及实践(二)
2019-01-03 10:09:49 】 浏览:717
Tags:Docker 使用 linuxserver/letsencrypt 生成 SSL 证书 最全 解析 实践

docker logs -f letsencrypt

最后,我卡在 Cleaning up challenges 这一步。这是因为我域名没有备案,无法通过域名访问到我所在的主机。这个时候打开域名链接被重定向到云主机提供商的网页禁止访问,Let’s encrypt 没办法通过域名访问到本机,所以验证失败(事实上它也没有说失败,只是一直停在那里)。

毋庸置疑,我是因为这个原因被禁止访问的。

既然 HTTP(80端口)方式验证走不通,tls-sni本来就不行,那就只能用 dns 验证了。

2.2 使用dns方式验证

这里以CloudFlare为例

第一步 完成域名服务器配置

首先,要有一个 cloudflare 账号。然后,在域名提供商那里将域名的 DNS 服务器改成 cloudflare 提供的 DNS 服务器。然后,在cloudflare那里添加对应的解析记录。

注意:解析记录 Status 的图标应该是灰色的,表示 DNS only。如果图标亮了,表示 DNS and HTTP proay(CDN),要使用 let’s encrypt 的 DNS 校验的话就不要再开 HTTP 代理和 CDN 了。开了代理的话 cloudflare 会免费给你提供(及自动维护更新)SSL证书,就可以直接 HTTP 访问了。不需要本文再干嘛了,而且还有免费 CDN,可谓十分良心。

第二步 完成域名服务器 API-KEY 相关配置并启动

这一步先正常启动,会启动失败但会生成所有的配置文件。再根据相应的 ini 文件里的提示去域名服务器提供商那里找到相对应的凭证,修改 ini 文件,重新启动容器。

启动如下。这次我映射到宿主机目录 /opt/letsencrypt2 下,把 VALIDATION 改为 dns,增加 DNSPLUGIN 配置为 cloudflare。

docker run -d \
--cap-add=NET_ADMIN \
--name=letsencrypt \
-v /opt/letsencrypt2:/config \
-e PGID=1002 -e PUID=1001  \
-e URL=my.com \
-e SUBDOMAINS=www \
-e VALIDATION=dns \
-e DNSPLUGIN=cloudflare \
-p 80:80 -p 443:443 \
-e TZ=Asia/Shanghai \
linuxserver/letsencrypt

使用 docker logs -f letsencrypt 查看。
这次是在 Cleaning up challenges 之后报错… 错误提示也很明确,是 Unknown X-Auth-Key or X-Auth-Email 的问题,配置是在 /config/dns-conf/cloudflare.ini 这个文件里面。

Cleaning up challenges
Error determining zone_id: 9103 Unknown X-Auth-Key or X-Auth-Email. Please confirm that you have supplied valid Cloudflare API credentials. (Did you enter the correct email address?)
IMPORTANT NOTES:
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
ERROR: Cert does not exist! Please see the validation error above. Make sure you entered correct credentials into the /config/dns-conf/cloudflare.ini file.

打开  /config/dns-conf/cloudflare.ini 可以看到

# Instructions: https://github.com/certbot/certbot/blob/master/certbot-dns-cloudflare/certbot_dns_cloudflare/__init__.py#L20
# Replace with your values
dns_cloudflare_email = cloudflare@example.com
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234567

感兴趣的可以到介绍的页面去查看相关信息,也可以直接到对应域名解析服务提供商那里去看。cloudflare 查看的地址是 https://dash.cloudflare.com/profile,最上面是 Email,最下面是 API Keys。


将对应内容替换到 /config/dns-conf/cloudflare.ini 里面(即宿主机的 /opt/letsencrypt2/dns-conf/cloudflare.ini 里面)。然后,使用 docker rm -f letsencrypt 强制删掉原容器。再重新运行上面的 docker run 就可以成功启动了。

查看日志如下:


最终会停在 Server ready 这一行(如果用 root 用户的 uid 和 gid 的话,现在会一直报错,但仍可使用)。这个时候就可以用 HTTPS 打开了(内置的 Nginx 只监听443端口,所以不能用 HTTP 打开),显示如下界面即为正常。

 

3. 设置

3.1 安全和密码保护

可以使用 Nginx 的 htpasswd 来对网站进行密码保护。htpasswd 的相关用法可见 htpasswd命令

  • 添加第一个密码访问用户(-c 参数表示创建一个加密文件,如果原来有的话则把原来的删掉)
docker exec -it letsencrypt htpasswd -c /config/nginx/.htpasswd <username>
  • 继续添加密码访问用户(把-c去掉即可)
docker exec -it letsencrypt htpasswd /config/nginx/.htpasswd <username>

如下为添加两个用户(lin 和 shen)

查看用户信息文件(/opt/letsencrypt2 是我映射到容器 /config 的目录)

然后,还需要在 Nginx 的配置文件(默认为 /config/nginx/site-confs/default)里面开启 auth_basic,如下:

location / {
    try_files $uri $uri/ /index.html /index.php?$args =404;
    # 将下列两行放到location{}里面,**Restricted**是网站要求输入账号密码时
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JVM基础面试题及原理讲解 下一篇Java HashMap源码分析

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目