前言
很多人第一次搭建网站会出现网站链接不安全的提示,是因为用了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