Linux下使用acme.sh 配置https 免费证书

acme.sh

简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书。
acme.sh 有以下特点:
一个纯粹用Shell(Unix shell)语言编写的ACME协议客户端。
完整的ACME协议实施。 支持ACME v1和ACME v2 支持ACME v2通配符证书
简单,功能强大且易于使用。你只需要3分钟就可以学习它。
Let‘s Encrypt免费证书客户端最简单的shell脚本。
纯粹用Shell编写,不依赖于python或官方的Let‘s Encrypt客户端。
只需一个脚本即可自动颁发,续订和安装证书。 不需要root/sudoer访问权限。
支持在Docker内使用,支持IPv6

本文记录了我在把网站从HTTP升级到 HTTPS ,申请和安装SSL证书路上踩过的几个坑。

安装环境:
操作系统:centos 7 X64
SSL证书来源:Let‘s Encrypt
安装用脚本:acme.sh
服务器:nginx
域名:chandao.test.com

1.安装acme.sh

curl https://get.acme.sh | sh

2.安装后的配置
把 acme.sh 安装到你的 home 目录下:~/.acme.sh/并创建 一个 bash 的 alias, 方便你的使用:

alias acme.sh=~/.acme.sh/acme.sh
echo ‘alias acme.sh=~/.acme.sh/acme.sh‘ >>/etc/profile

安装过程中会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书(可执行crontab -l 查看)。

00 00 * * * root /root/.acme.sh/acme.sh --cron --home /root/.acme.sh &>/var/log/acme.sh.logs

3.申请证书
acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证(本文不提供dns方式申请)

HTTP 方式方法如下:

acme.sh --issue -d chandao.test.com --webroot /data/wwwroot/chandao

只需要指定域名, 并指定域名所在的网站根目录【命令中/data/wwwroot/chandao为根目录路径】. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

4.证书的安装
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件,
例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件.
这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

acme.sh --installcert -d chandao.test.com --key-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key --fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer --reloadcmd "service nginx force-reload"

附带完成前面1-4步骤的截图:

5. Nginx/Tengine服务器安装SSL证书

Nginx 配置Http和Https共存

listen 80; #如果硬性要求全部走https协议,这一行去除
listen 443 ssl; #如果硬性要求全部走https协议,这里去除ssl
server_name chandao.test.com;

#ssl on; #如果硬性要求全部走https协议,这里开启ssl on
ssl_certificate /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer;
ssl_certificate_key /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key;

#ssl性能调优
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

完整例子:

server {
  listen 80;  #如果硬性要求全部走https协议,这一行去除
  listen       443 ssl;    #如果硬性要求全部走https协议,这里去除ssl
  server_name chandao.test.com;
  access_log off;
  index index.html index.htm index.php;
  root /data/wwwroot/chandao;

  #ssl on;   #如果硬性要求全部走https协议,这里开启ssl on
  ssl_certificate   /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer;
  ssl_certificate_key  /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key;

  #ssl性能调优
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;

  #error_page 404 /404.html;
  #error_page 502 /502.html;

  location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
  }
  location ~ /\.ht {
    deny all;
  }
}

6.重启nginx
保存退出后,通过nginx -t来检查配置文件是否正确,有错误的话改之即可。配置文件检测正确之后,通过service nginx force-reload来重载配置文件。

nginx -t
service nginx force-reload

7. 更新 acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.

升级 acme.sh 到最新版 :

acme.sh --upgrade

如果你不想手动升级, 可以开启自动升级:

acme.sh --upgrade --auto-upgrade

之后, acme.sh 就会自动保持更新了.

你也可以随时关闭自动更新:

acme.sh --upgrade --auto-upgrade 0

6. 出错怎么办:
如果出错, 请添加 debug log:

acme.sh --issue ..... --debug 

或者:

acme.sh --issue ..... --debug 2

8.注意事项:
1、开启后请把所有网站的链接替换为https,尤其是图片链接等。推荐写链接时用//www.test.com而不是https://www.test.com,这种写法会优先使用HTTPS而且不会禁止HTTP。
2、记得打开443端口。
3、如果过了一段时间出现了类似NET :: ERR_CERT_AUTHORITY_INVALID的错误,请检查是不是设置了证书链SSLCertificateChainFile。
4、安装证书时,--key-file和--fullchain-file的参数是你想要把证书安装在的位置,而不是之前申请到的证书的位置。这个位置会在配置nginx时使用到。
5、如果配置参数出错,最好只安装不要再申请。因为申请次数有限制。同一域名,每周最多申请10个证书,每周刷新。
6、域名要写常用的。如果要使用https://www.test.com访问网页,域名选项-d 的参数一定要写www.test.com,如果申请证书和访问的域名不完全一致,访问时会提示不安全“访问的网站使用的安全证书域名错误”。

原文地址:https://www.cnblogs.com/-mrl/p/10601817.html

时间: 2024-10-07 19:53:58

Linux下使用acme.sh 配置https 免费证书的相关文章

Linux下Kafka单机安装配置方法(图文)

Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •Kafka将消息以topic为单位进行归纳.•将向Kafka topic发布消息的程序成为producers.•将预订topics并消费消息的程序成为consumer.•Kafka以集群的

Linux下Elasticsearch集群配置

一.简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 二.集群安装 1.选择指定的版本下载 wget https://download.elastic.co/elasticsearch/release/org/elas

linux下免密登录配置

1.首先大家先开三台虚拟机 2.回到首层. 2.1:编辑文件:    vim /etc/ssh/sshd_config 3:在master的linux上生成ssh密钥: ssh-keygen -t rsa 4.同理,这事slave1和slave2同以上操作!(在这截图展示效果): 5.接下来master上切换到.ssh下: 5.1命令:cd ~和cd .ssh 5.2:把生成的id_rsa.pub放置到slave1和slave2中~/.ssh目录下 5.2.1:命令:scp ~/.ssh/id_

Linux下FTP虚拟账户配置

参考模版/usr/share/doc/vsftpd-2.0.5/EXAMPLE/VIRTUAL_USERS) 1.创建虚拟账户 [[email protected] ~]#yum install db4-utils [[email protected] ~]#vim /etc/vsftpd/vlogin tomcat #账户名称 123456 #密码 jerry #账户名称 654321 #密码 [[email protected] ~]#db_load -T -t hash -f /etc/v

linux 下安装 mysql 并配置 python 开发环境

1.安装 mysql ,安装过程中将提示设置 root 用户的密码,默认可以设置为 rootadmin . $ sudo apt-get install mysql-server 2.安装 mysql 开发工具(不安装时,安装 MySQL-python 提示错误 "mysql_config not found"). $ sudo apt-get install libmysqld-dev 3.安装 python 的 mysql 库 MySQL-python (首先安装 python-d

Linux下apache+php搭建配置记录

linux下apache+php搭建配置记录 第1章  环境说明 1.1 系统说明 CentOS 6.4 1.2 软件说明 httpd-2.4.2.tar.gz apr-util-1.4.1.tar.gz apr-1.4.6.tar.gz pcre-8.13.tar.gz php-5.4.3.tar.bz2 libmcrypt-2.5.8.tar.gz mhash-0.9.9.9.tar.gz 第2章  Apache搭建说明 2.1 安装依赖包 yum install make openldap

linux 下安装jdk及配置jdk环境图解

linux 下安装jdk及配置jdk环境图解 一:先检测是否已安装了JDK 执行命令: # rpm -qa|grep jdk  或   # rpm -q jdk  或  #find / -name jdk* /soft/openfire_java/jdk-7u40-linux-x64.rpm /usr/java/jdk1.7.0_15 /usr/java/jdk1.7.0_15/jre/lib/servicetag/jdk_header.png /usr/java/jdk1.7.0_15/lib

Linux 下编译并安装配置 Qt 4.53全过程

最近准备做 Nokia 的 Symbian,Maemo 下触摸屏开发.考虑到程序的跨平台可移植性,最终选择使用 Qt 开发.相对来说,国内关于 Qt 相关文档并不算很多.作者将 Linux 下编译并安装配置 Qt 全过程总结了一下,只希望可以方便更多的朋友! 1.获得源代码         src 官网下载地址:ftp://ftp.qt.nokia.com/qt/source/        2009 年 10 月 1 日发布的 qt-x11-opensource-src-4.5.3.tar.g

让你提前认识软件开发(51):VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改

第3部分 软件研发工作总结 VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改 [文章摘要] Pclint是一种C/C++软件代码静态分析工具.它是一种更加严格的编译器,能够发现普通编译器所不能发现的代码中的很多问题,因此被广泛应用于软件开发项目中. 本文介绍了如何在VC++集成开发环境中配置Linux下的Pclint工程,给出了C语言中pclint规则A检查的常见错误,并描述了对应的修改办法. [关键词] VC++  Pclint  配置  操作  修改 1. 前言 P