Certbot 手动获取 SSL 证书
场景
Apache 运行在前端作为反向代理,后端程序运行在 docker 容器中。
SSL 证书获取方法
使用 certbot --apache
无法获取 SSL 证书,要通过 certbot certonly --manual
手动获取,过程中使用 python:2-alpine
镜像创建临时容器用于身份校验,注意容器的端口映射。
sudo docker run --rm -it -p 80:2368 python:2-alpine /bin/sh
原理是使用 python2 搭建一个临时的 web 环境实现域名校验,依照 certbot 的交互式提示在临时容器中创建相关内容即可。
配置 https
获取到的 SSL 证书存储在 /etc/letsencrypt/live/your.domian/
目录。
apache 虚拟主机配置文件示例:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName it.ismy.fun
ProxyPass / http://localhost:2368/
ProxyPassReverse / http://localhost:2368/
SSLCertificateFile /etc/letsencrypt/live/it.ismy.fun/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/it.ismy.fun/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
提示:配置文件中
Include /etc/letsencrypt/options-ssl-apache.conf
这一行引用了Let's encrypt
提供的 SSL 标准配置信息,引用它可以省去在每个虚拟机配置文件中重复粘贴大量 SSL 配置内容。
http 重定向到 https
修改 http 配置文件,例如:
<VirtualHost *:80>
ServerName it.ismy.fun
RewriteEngine on
RewriteCond %{SERVER_NAME} =yourdomian.com [OR]
RewriteCond %{SERVER_NAME} =otherdomian.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>