免费启用HTTPS的操作过程笔记

2024-02-27 198点热度 1人点赞 0条评论

本简明教程将为您提供免费启用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

mylomen

本人从事 JAVA 开发10多年,将之前整理的笔记分享出来,希望能够帮助到努力的你。

文章评论