证书管理工具
https://keymanager.trustasia.com/release/KeyManager-Setup-4.4.19.exe
官方网站: https://app.zerossl.com/
官方网站: https://ohttps.com/
官方网站: https://freessl.cn/login
Centos 快速下载: curl https://get.acme.sh | sh -s email=my@example.com
Let’s Encrypt 是一个免费的,自动化的,开放的证书颁发机构(CA),为公众的利益而运行。 它是一项由 Internet Security Research Group(ISRG)提供的服务。
acme.sh 则是实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。
curl https://get.acme.sh | sh -s email=my@example.com
source ~/.bashrc
#如果你的 crontab -l 中确实没有acme定时任务的话, 可以执行:
acme.sh --install-cronjob
#它会帮你安装 cronjob.
#如果有了, 就可以了.
vim /root/.acme.sh/account.conf
LOG_FILE='/root/.acme.sh/acme.sh.log'
#LOG_LEVEL=1
#AUTO_UPGRADE="1"
#NO_TIMESTAMP=1
ACCOUNT_EMAIL='freessl.com-email'
UPGRADE_HASH='16dc21afff11c1f4de7ebe627ed60d41496d1sxx'
USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/var/lib/snapd/snap/bin:/usr/local/mysql/bin:/root/bin'
DEFAULT_ACME_SERVER='https://acme-v02.api.letsencrypt.org/directory'
SAVED_CF_Email='your@email.com'
SAVED_CF_Key='CloudFlare-key'
#wq保存退出
vim /root/.acme.sh/acme.sh.env
export CF_Email="your@email.com"
export CF_Key="CloudFlare-key"
#wq保存退出
只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.
假设服务器在运行着的,网站域名为 80ii.cn,根目录为 /data/ssl/80ii.cn/,那么只需要执行下面这条语句就行。
# 生成 RSA 证书:
acme.sh --issue -d 80ii.cn -w /data/ssl/80ii.cn/ #单域名
# 生成 ECC 证书:
acme.sh --issue -d 80ii.cn -d www.80ii.cn -w /data/ssl/80ii.cn/ --keylength ec-256 #多域名
/var/www/_letsencrypt/ 为 80ii.cn 站点下的 /.well-known/acme-challenge/ 证书请求目录。
如果没有安装 web 服务器,acme.sh 也自带一个建议的web服务用于证书申请,前提是需要安装 socat ,80端口没有被占用。使用方法:
acme.sh --issue -d 80ii.cn --standalone
这种方式的好处是,你不需要任何服务器,不需要任何公网 ip,只需要 dns 的解析记录即可完成验证,而且可申请泛域名证书。坏处是,需要配合DNS解析服务商的API使用,否则 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。
目前支持 DNSPod、CloudXNS、Aliyun、jdcloud、 CloudFlare、 GoDaddy、 Azure、AWS 等国内外大多数主流DNS服务提供商。详细清单详见: https://github.com/acmesh-official/acme.sh/wiki/dnsapi
export Ali_Key="abcd"
export Ali_Secret="xxxxxxxxxx"
# RSA 证书
acme.sh --issue --dns dns_ali -d 80ii.cn -d cp.80ii.cn
# ECC 证书
acme.sh --issue --dns dns_ali -d 80ii.cn -d cp.80ii.cn --keylength ec-256
Ali_Key 和 Ali_Secret 需要从阿里云RAM访问控制中获取。
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
acme.sh --issue --dns dns_dp -d cp.80ii.cn -d 80ii.cn
export CF_Email="your@email.com"
export CF_Key="CloudFlare-key"
#手动添加txt 认证并申请证书
#第一步:
acme.sh --issue --dns dns_cf -d 80ii.cn --yes-I-know-dns-manual-mode-enough-go-ahead-please
#第二步(添加验证完成执行):
acme.sh --renew --dns dns_cf -d 80ii.cn --yes-I-know-dns-manual-mode-enough-go-ahead-please
证书生成以后, 接下来需要把证书安装到真正需要用它的地方。acme.sh默认生成的证书都放在安装目录下: ~/.acme.sh/ ,但是官方不推荐直接使用该目录下的证书文件,仅供 acme.sh 内部使用。
正确的使用方法是使用 –installcert 命令,并指定目标位置, 然后证书文件会被复制到相应的位置。
acme.sh --installcert -d 80ii.cn \
--key-file /data/ssl/80ii.cn/80ii.cn.key \
--fullchain-file /data/ssl/80ii.cn/80ii.cn.crt \
--reloadcmd "service nginx force-reload"
–reloadcmd 参数用于让web服务器重新加载新的证书文件,例子中使用的是 nginx 服务器,您也可以定义成其它服务器。
–ecc 参数用于 ECC 证书,rsa证书请不要添加此参数,下同。
Let’s Encrypt 的证书有效期为3个月,每3个月得重新申请证书。通过 acme.sh 可以自动管理SSL证书的申请。通过上面步骤的安装后 acme.sh 会定期自动更新SSL证书。
当然,acme.sh 也提供手动更新方式。
acme.sh --renew -d 80ii.cn --ecc --force
--force 强制安装、强制更新证书或覆盖 sudo 限制。
--ecc 指定使用 ECC 证书。
有时候你可能需要移除特定域名的自动申请,这时候可以使用下面的命令让 acme.sh 取消对特定域名的自动续期。当然已申请的证书仍然有效,不会失效。
acme.sh --remove -d 80ii.cn --ecc
acme.sh --installcert -d 80ii.cn \
--key-file /data/ssl/80ii.cn/80ii.cn.key \
--fullchain-file /data/ssl/80ii.cn/80ii.cn.crt \
--reloadcmd "service nginx force-reload"
acme.sh --installcert -d 80ii.cn \
--key-file /data/ssl/80ii.cn/80ii.cn.key \
--fullchain-file /data/ssl/80ii.cn/80ii.cn.crt \
--reloadcmd "service nginx force-reload" --ecc
执行成功后,终端最终显示:Reload success
#(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)
–install-cert 将颁发的证书安装到 apache/nginx 或任何其他服务器。
–key-file 发行/续订后将密钥文件复制到的路径。
–fullchain-file 发布/续订后将全链证书文件复制到的路径。
–reloadcmd 发布/更新后重新加载服务器后要执行的命令
然后修改Nginx配置文件使用 /data/ssl/80ii.cn/80ii.cn.key、/data/ssl/80ii.cn/80ii.cn.crt即可
server
{
listen 80;
listen 443 ssl http2;
server_name 80ii.cn www.80ii.cn;
index index.php index.html index.htm;
root /www/80ii.cn;
ssl_certificate /data/ssl/80ii.cn/80ii.cn.crt;
ssl_certificate_key /data/ssl/80ii.cn/80ii.cn.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
access_log /www/wwwlogs/80ii.cn.log;
error_log /www/wwwlogs/80ii.cn.error.log;
}
—— 评论区 ——