SSL证书(Secure Sockets Layer certificate)是一种用于加密在网络上传输的数据的数字证书。SSL证书通过在客户端和服务器之间建立安全连接来确保数据的保密性和完整性。SSL证书通过在服务器和客户端之间建立安全连接,对数据进行加密,以防止第三方未经授权的访问和数据篡改。

SSL证书包含了一些关键信息,如证书持有者的名称、证书的序列号、证书的有效期、公钥等。当用户访问一个使用SSL证书的网站时,浏览器会与服务器进行握手,交换证书信息,并验证证书的有效性。如果验证通过,浏览器和服务器之间就会建立一个加密连接,从而保护数据的传输安全。

SSL证书是网站安全的重要组成部分,它不仅能够保护用户的个人信息和数据安全,还能够增加网站的信任度。通常,网站上的敏感信息如信用卡信息、登录凭据等都应该通过SSL证书进行加密传输,以确保信息不被窃取或篡改。

定时免费生成策略

acme.sh是一个开源的完全用Shell(Unix shell)语言编写的ACME协议客户端。有完整的ACME协议实现;支持ECDSA证书;支持SAN和通配符证书;兼容Bash、dash和sh;只需一个脚本即可自动颁发、续签和安装您的证书。

中国区使用指南

由于防火墙的原因,中国区的使用和仓库的教程有些出入,具体的问题通过翻墙VPN技术解决。以下的例子以腾讯云平台购买的域名为例,其他平台的自行翻阅仓库指南。

安装acme.sh

将git仓库的代码克隆到服务器

git clone https://github.com/acmesh-official/acme.sh.git

安装scme.sh

./accmme.sh --install

完成后进入到目录,安装目录是你的home目录,进入目录后可以看到如下文件:

配置项目

首先打开account.conf文件,这里需要配置两个东西

1、代理VPN地址

添加代理可以解决很多奇奇怪怪的Time Out报错,这里建议配置上。

export http_proxy="socks5h://localhost:1081"
export https_proxy="socks5h://localhost:1081" 

2、配置腾讯云平台Key

  1. 登录 腾讯云控制台,进入 访问管理 页面,单击左侧菜单栏的访问密钥,进入 API 密钥管理页面。

  2. 单击新建密钥,创建 API 密钥,并记录保存 SecretId 和 SecretKey。

然后将 SecretId 和 SecretKey配置到文件内

export Tencent_SecretId="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

创建证书

使用如下命令:

./acme.sh --issue --dns dns_tencent -d example.com -d *.example.com

运行后,acme.sh 将自动为您的域名申请证书,并将证书文件保存在~/.acme.sh/example.com/目录下,并且会自动为您的域名配置证书自动续期任务,无需手动续期。运行结果如下:

如果出现以下错误:

按照提示更新邮箱地址即可解决

安装证书

acme.sh 不建议直接使用~/.acme.sh/目录下的证书文件,而是通过 acme.sh 提供的命令将证书安装到指定位置,以确保证书的正确使用和续期,以下以 Nginx 为例。

./acme.sh --install-cert -d example.com --key-file /path/to/keyfile/in/nginx/key.pem --fullchain-file /path/to/fullchain/nginx/cert.pem --reloadcmd "service nginx force-reload"

请将example.com替换为您的域名,/path/to/keyfile/in/nginx/key.pem和/path/to/fullchain/nginx/cert.pem替换为证书实际路径,service nginx force-reload替换为您使用的 web 服务重载命令。

完成申请后请将证书配置到您的网站中,以 Nginx 为例,示例如下:

server {
    listen 443 ssl http2;

    server_name example.com;

    # 请替换为证书实际路径
    ssl_certificate /path/to/keyfile/in/nginx/cert.pem;
    ssl_certificate_key /path/to/fullchain/nginx/key.pem;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers off;
    ssl_prefer_server_ciphers on;
    location / {
        root /nginx/www/html;
    }
}