本简明教程将为您提供免费启用HTTPS证书的方法,保护您的网站和访问者的安全。
迈向HTTPS加密通信,提高网站的信任度和搜索引擎排名。
了解并跟随本教程,快速简单地实现HTTPS安全策略,为您的网站带来更好的保护和用户体验。
前置条件
- 拥有域名
- 确定好需要开启https 的域名或者子域名
- 拥有一台有外网ip的服务器
- 域名/子域名解析到即将操作的机器ip
- 下述两种方式,根据自身需求选择一个
1. 通过nginx 方式获取https证书
一次只能申请一个域名,不支持泛域名;
如果有多个域名,可以多次执行
安装 certbot for ubuntu
apt update && apt install snapd && snap install core
# 验证安装结果[非必要]
snap install hello-world
# 运行[非必要]
$ hello-world
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
安装 certbot for centos
yum -y install epel-release #安装依赖
yum -y install snapd #安装snap
systemctl enable --now snapd.socket #启动snap通信套接字
ln -s /var/lib/snapd/snap /snap #创建如下软连接,为了启用classic snap的支持
snap install core
# 更新【非必要】
snap refresh core
# 安装Certbo
snap install --classic certbot
# 配置Certbot命令行,执行如下命令以确保Certbot命令行可用
ln -s /snap/bin/certbot /usr/bin/certbot
安装最新版本 nginx
如果已经安装好nginx则不需要执行此步骤;
如果不需要安装最新版本nginx 直接执行 apt install nginx -y 即可
release=$(lsb_release -cs)
cat <<EOF > /etc/apt/sources.list.d/nginx.list
deb https://nginx.org/packages/ubuntu/ $release nginx
deb-src https://nginx.org/packages/ubuntu/ $release nginx
EOF
apt-key adv --recv-key --keyserver keyserver.ubuntu.com ABF5BD827BD9BF62
apt update
apt install nginx -y
# 查看版本
nginx -V
在nginx 里面配置域名指向的端口
# 配置1 yourdomainname.com
server {
listen 80;
# 需要开启https 的域名或者子域名
server_name yourdomainname.com;
location = / {
add_header Content-Type 'text/html; charset=utf-8';
return 200 $remote_addr;
}
}
# 配置2 test.yourdomainname.com
server {
listen 80;
# 需要开启https 的域名或者子域名
server_name test.yourdomainname.com;
location = / {
add_header Content-Type 'text/html; charset=utf-8';
return 200 $remote_addr;
}
}
申请证书
# 如果nginx 文件有改动需要执行
nginx -t
nginx -s relaod
# 自动申请证书, 过程中填入 自己的邮箱即可
# 运行此命令获取证书,并让Certbot自动编辑Nginx配置以提供服务,只需一步即可打开HTTPS访问
# 仅获得证书。如果你希望手动配置nginx,输入 certbot certonly --nginx
certbot --nginx
# 指定域名
certbot install --cert-name test.yourdomainname.com
# 申请成功,在日志里面会显示 证书的路径。 然后根据证书路径配置域名的443端口
server {
server_name yourdomainname.com;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/yourdomainname.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/yourdomainname.com/privkey.pem; # managed by Certbot
ssl_session_timeout 5m;
# SSL协议配置
ssl_protocols SSLv2 SSLv3 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location = / {
add_header Content-Type 'text/html; charset=utf-8';
return 200 $remote_addr;
}
}
续签
免费证书有有效期,需要设置脚本自动续签
# 在 crontab -e 里面新增 每月8号7:30 执行一次
30 7 8 * * certbot renew && nginx -s reload > /dev/null 2>&1 &
验证
在浏览器里面使用 https方式打开域名 如 https://test.yourdomainname.com
certbot 常用命令
# 续签证书
certbot renew
# perform a test run
certbot certonly --dry-run
certbot renew --dry-run
# 显示证书信息
certbot certificates
# 撤销证书
certbot revoke --cert-path /etc/letsencrypt/live/CERTNAME/cert.pem
# 删除证书(撤销之后使用)
certbot delete --cert-name example.com
2. 通过 dns管理平台的key和secret 方式获取https证书
此种方式支持泛域名;
不同域名托管平台 获取key和secret的方式不一样, 脚本执行也有一些区别;
key和secret 需要自行保存好,有一定的安全隐患。请自行评估
安装
此demo 以阿里云为例。
其他平台请参考 https://github.com/acmesh-official/acme.sh/wiki/dnsapi
# 安装
apt install socat -y
curl https://get.acme.sh | sh -s email=youremailaddress
alias acme.sh=~/.acme.sh/acme.sh
# 获取 阿里云key 和 secret。执行export。
# 证书最终生成好之后Ali_Key和Ali_Secret会被保存至~/.acme.sh/account.conf文件中。
export Ali_Key="key" && export Ali_Secret="secret"
# 执行 for 阿里云。
# ps: 因为我本地有nginx 占用了 80 端口,这里需要一个新的空闲端口 8088
acme.sh --issue --dns dns_ali -d *.yourdomainname.com --debug --httpport 8088
# 默认的输出的目录
~/.acme.sh
# 申请成功,在日志里面会显示 证书的路径。 然后根据证书路径配置域名的443端口
server {
server_name yourdomainname.com;
listen 443 ssl; # managed by Certbot
ssl_certificate /home/ubuntu/.acme.sh/*.yourdomainname.com_ecc/fullchain.cer; # managed by Certbot
ssl_certificate_key /home/ubuntu/.acme.sh/*.yourdomainname.com_ecc/*.yourdomainname.com.key; # managed by Certbot
ssl_session_timeout 5m;
# SSL协议配置
ssl_protocols SSLv2 SSLv3 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location = / {
add_header Content-Type 'text/html; charset=utf-8';
return 200 $remote_addr;
}
}
续签
免费证书有有效期,需要设置脚本自动续签
# 在 crontab -e 里面新增 每月8号7:30 执行一次
21 7 * * * "${HOME}/.acme.sh"/acme.sh --cron --home "${HOME}/.acme.sh" && nginx -s reload > /dev/null &
验证
在浏览器里面使用 https方式打开域名 如 https://test.yourdomainname.com
文章评论