前言

很多人第一次搭建网站会出现网站链接不安全的提示,是因为用了HTTP协议请求
HTTP被认为不安全的原因主要有两点:
明文传输: HTTP在传输数据时是以明文形式进行的,这意味着通过网络传输的数据可以被轻松窃听和截获。这使得敏感信息,如用户名、密码、个人数据等,容易受到攻击者的窃取威胁。
缺乏数据完整性和验证: HTTP没有提供数据完整性验证和身份验证的机制。这意味着无法确保在传输过程中数据没有被篡改,并且无法验证通信的双方是否是合法的。
为了解决这些安全性问题,引入了HTTPS协议。HTTPS通过在HTTP上添加SSL/TLS加密层,提供了数据的加密、完整性验证和身份验证,从而保护了用户和网站之间的通信安全。因此,当浏览器提示HTTP连接不安全时,它实际上是在警告用户,因为使用HTTP传输的信息可能会被攻击者窃听或篡改。使用HTTPS可以提高通信的安全性,特别是在涉及敏感信息的情况下。

SSL/TLS证书

SSL(安全套接层)和其继任者TLS(传输层安全)是用于在计算机网络上提供加密通信的协议。SSL/TLS证书是一种用于确保网络通信安全的数字证书。
当用户访问一个启用了HTTPS的网站时,服务器会将其SSL/TLS证书发送给用户的浏览器。浏览器通过验证证书的有效性,包括数字签名和证书的有效期等信息,来确保连接的安全性。如果证书有效且可信,则浏览器使用其中的公钥加密通信,确保数据在传输过程中受到保护。

简单介绍一下Acme

acme.sh是一个基于Shell脚本编写的开源项目,用于获取SSL/TLS证书,可以实现自动申请、续签、安装证书的脚本工具。

首先根据系统

# CentOS 命令
yum update -y          #更新系统
yum install -y curl    #安装curl~
shell
# Debian/Ubuntu 命令
sudo apt update -y          #更新系统
sudo apt install -y curl    #安装curl
shell

安装acme.sh

# 安装很简单:
sudo apt-get install curl
sudo curl  https://get.acme.sh | sh
shell

安装过程进行了以下几步:

acme.sh 安装到你的 root 目录下: /root/.acme.sh/
自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了,# 需要更新, 则会自动更新证书.
在 /root/.bashrc 创建 一个 bash 的 alias: alias acme.sh=“/root/.acme.sh/acme.sh”
cronjob 的任务可以使用命令 crontab -e 查看。

提示

从 开始August-1st 2021,acme.sh 将发布 v3.0,其中默认 CA 将改用ZeroSSL,您必须先注册帐户(一次),然后才能颁发新证书

~/.acme.sh/acme.sh --register-account -m [email protected]
shell

Nginx 的方式验证申请

这种方式需要你的服务器上面已经部署了 Nginx 环境,并且保证你申请的域名已经在 Nginx 进行了 conf 部署。(被申请的域名可以正常被打开)

 ~/.acme.sh/acme.sh --issue  -d "你的域名"   --nginx
shell

当然你也可以配置一个临时的Nginx 相关网页

一般默认位置/etc/Nginx/conf.d文件里面创建一个名字.conf的文件添加复制一下代码

vim demo.conf #然后粘贴下面的代码 demo为你自定义的名字可以进行修改。
shell
server {
    listen 80;  # 监听端口80

    server_name your_domain.com;  # 替换为你的域名或服务器IP

    root /path/to/your/web/root;  # 替换为你网站文件的根目录

    index index.html index.htm;  # 指定默认的索引文件

    location / {
        # 其他配置,例如代理到后端应用程序等
    }

    # 添加其他配置,例如日志记录、安全性设置等
}
shell

保存配置文件并重启Nginx服务,以应用更改。使用以下命令可以重启Nginx

sudo service nginx restart
sudo systemctl restart nginx
shell

如果申请成功你会看见这类提示

-----END CERTIFICATE-----
[Fri Dec 23 xx:xx:xx CST xxxx] Your cert is in  /root/.acme.sh/xxx/xxx.cer 
[Fri Dec 23 xx:xx:xx CST xxxx] Your cert key is in  /root/.acme.sh/xxx/xxx.key 
[Fri Dec 23 xx:xx:xx CST xxx] The intermediate CA cert is in  /root/.acme.sh/xxx/ca.cer 
[Fri Dec 23 xx:xx:xxx CST xxxx] And the full chain certs is there:  /root/.acme.sh/xxx/fullchain.cer 
shell

安装证书到指定文件夹

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/ , 请不要直接使用此目录下的证书文件。 正确的使用方法是使用 --install-cert 命令,或者Copy命令并指定目标位置, 然后证书文件会被copy到相应的位置,比如下面的代码

首先在Nginx根目录下创建一个cert文件夹存放相关证书文件

mkdir -p /etc/nginx/crt
mkdir -p /etc/nginx/crt/你的域名名字
shell

然后Linux copy命令 cp [选项] 源文件/目录 目标目录

cp  /root/.acme.sh/xxx/fullchain.cer   /etc/nginx/certs/xxx/fullchain.cer
cp /root/.acme.sh/xxx/xxx.key   /etc/nginx/certs/xxx/
# 或者--install-cert命令
 ~/.acme.sh/acme.sh --installcert -d 你的域名.com \
--key-file  /etc/nginx/certs/private.key \
--fullchain-file /etc/nginx/certs/cert.crt
shell

上面的 etc/nginx/certs/private.key 以及 、/etc/nginx/certs/cert.crt 是把密钥和证书安装到 /etc/nginx/certs 目录,并改名为 private.key 和 cert.crt

更新证书

目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.

更新 Acme 脚本

升级 Acme.sh 到最新版本

 ~/.acme.sh/acme.sh --upgrade
shell

开启自动升级

~/.acme.sh/acme.sh  --upgrade  --auto-upgrade
shell

修改Nginx配置文件

server {
    listen 80;
    server_name your_domain.com www.your_domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your_domain.com www.your_domain.com;

    ssl_certificate /etc/nginx/ssl/your_domain.crt; #你证书的路径 绝对路径
    ssl_certificate_key /etc/nginx/ssl/your_domain.key;#你密钥的路径 绝对路径

    # 可选:SSL/TLS配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384';
    ssl_prefer_server_ciphers off;

    # 可选:启用HSTS(HTTP Strict Transport Security)
    add_header Strict-Transport-Security "max-age=31536000" always;

    # 以下是其他配置,例如反向代理、网站根目录等
    location / {
        # 其他配置...
    }
}

shell

保存配置文件并重启Nginx服务,以应用更改。使用以下命令可以重启Nginx你就会发现你的网站已经走了HTTPS协议了

示例,通过crontab -l命令查看证书更新任务计划

0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null
shell

目录