acme.sh介绍:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

github:https://github.com/Neilpang/acme.sh

1. 安装 acme.sh

安装非常简单,就一个命令,建议使用root账户进行安装,以下演示都是root账户。

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

安装所在的目录为 ~/.acme.sh/

创建一个别名方便使用

alias acme.sh=~/.acme.sh/acme.sh

安装时已经为系统创建crontab定时任务,续签证书的调度任务。可以通过 crontab -l 查看,如下

自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

安装过程中所有的修改都限制在安装目录~/.acme.sh/中,因此不用担心对已有的系统任何功能和文件污染。

2. 生成SSL证书

2.1

假设为 www.mydomain.com 这个域名配置证书。

在生成之前需要先安装 socat ,使用如下命令安装

mkdir ~/src
cd ~/src
wget http://www.dest-unreach.org/socat/download/socat-1.7.3.0.tar.gz
tar -xf socat-1.7.3.0.tar.gz
cd socat-1.7.3.0
./configure --prefix=$HOME
make
make install

下面开始正式生成ssl证书,生成证书的方式有多种,可以参考:https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

在此生成证书的方案选择standalone方式(需要80端口不被占用,acme.sh 自己作为一个web服务临时监听80端口完成证书验证),由于此时服务器(nginx)已经占用80端口

通过咨询acme.sh作者续签问题,注:由于使用nginx服务,后面会一直占用80端口,如下:

所以最终我们的生成证书命令为:

acme.sh --issue -d www.mydomain.com --standalone --pre-hook "/nginx/nginx/sbin/nginx -s stop" --post-hook "/nginx/nginx/sbin/nginx"

其中 /nginx/nginx/sbin/nginx 为自己服务器中nginx执行文件

成功之后,生成的证书目录在:/root/.acme.sh/www.mydomain.com

2.2 续签相关

2.1中也有提到生成签名需要80端口不被占用,那么问题来了,后面服务器要启动nginx,而且需要占用80端口,所以上面的续签定时是有问题的,所以crontab定时修改如下:

crontab -e

44 3 * * * source ~/.bash_profile && ~/.acme.sh/acme.sh --issue -d www.mydomain.com --standalone --pre-hook "/nginx/nginx/sbin/nginx -s stop" --post-hook "/nginx/nginx/sbin/nginx" > /dev/null

保存即可!注:crontab定时中需要绝对路径。

3. nginx配置SSL证书

    #ssl
upstream mydomain7777 {
server 127.0.0.1:7777 weight=1;
}
server {
listen 443 ssl;
server_name www.mydomain.com; location / {
proxy_pass http://mydomain7777;
proxy_redirect default;
client_max_body_size 10m; #表示最大上传10M,需要多大设置多大。
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Scheme $scheme;
} ssl_certificate /root/.acme.sh/www.mydomain.com/fullchain.cer;
ssl_certificate_key /root/.acme.sh/www.mydomain.com/www.mydomain.com.key; ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}

还可以配置http强制转https(可选)

    server {
listen 80;
server_name www.mydomain.com;
rewrite ^(.*) https://$server_name$1 permanent;
}

注:proxy_set_header X-Forwarded-Scheme $scheme; 配置是为了程序中获取到请求协议(http或者https),以java为例获取代码如下:

String scheme = request.getHeader("X-Forwarded-Scheme");
if (scheme == null) {
scheme = request.getScheme();
}

参考博客:

1. https://my.oschina.net/u/3042999/blog/1858891

2. https://community.webfaction.com/questions/21246/trying-to-use-lets-encrypt-using-acmesh-need-socat-tools

另外有dns生成ssl证书的方式,请参考 https://www.cnblogs.com/007sx/p/11379966.html

centos7利用acme.sh获取Let's Encrypt的永久免费ssl证书并配置网站域名https访问的更多相关文章

  1. IIS - 自动申请、部署Let's Encrypt的免费SSL证书(让网站实现HTTPS协议)

    IIS - 自动申请.部署Let's Encrypt的免费SSL证书(让网站实现HTTPS协议) 2017-12-19发布:hangge阅读:161   一.HTTPS 协议介绍 1,什么是 HTTP ...

  2. docker获取Let's Encrypt永久免费SSL证书

    一 起因 官方的cerbot太烦了,不建议使用 还不如野蛮生长的acme.sh,而这里介绍docker运行cerbot获取Let's Encrypt永久免费SSL证书 二 选型 cerbot的证书不会 ...

  3. 实战申请Let's Encrypt永久免费SSL证书过程教程及常见问题

    最近需要https这里看到一份不错的博客,收录一下! Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust ...

  4. 申请Let's Encrypt永久免费SSL证书

    Let's Encrypt简介 Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust.EFF等组织人员发起 ...

  5. 申请Let’s Encrypt永久免费SSL证书过程教程及常见问题

    配置证书https://easy.zhetao.com/   虽然目前Let’s Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用,为了考虑到文章的真 ...

  6. 使用Let’s Encrypt创建nginx免费SSL证书

    资料参考: https://www.freehao123.com/top-8-free-ssl-cert/   八大免费SSL证书-给你的网站免费添加Https安全加密 https://www.fre ...

  7. centos 下安装 Let’s Encrypt 永久免费 SSL 证书

    功能 https证书,免费版,每三个月续签一次,可以用过脚本自动续签 安装 ssh登录到域名配置所在的主机(nginx,apache等) 安装git yum -y install git 输入 git ...

  8. 使用acme.sh申请&自动续期LetsEncrypt免费SSL证书(转)

    一.简介 LetsEncrypt是一个免费.自动.开放的证书颁发机构.acme.sh 实现了 acme 协议, 可以从 LetsEncrypt 生成免费的证书. 本文介绍如何使用acme.sh来签发并 ...

  9. 使用acme.sh自动申请、续期、部署免费的SSL证书

    参考文档:https://github.com/acmesh-official/acme.sh 一个使用纯shell操作的免费SSL证书申请部署工具. 免费的SSL证书由以下CA机构提供: ZeroS ...

随机推荐

  1. HTTP协议COOKIE和SESSION有什么区别

    1.为什么会有COOKIE这种机制 首先一种场景, 在一个网站上面, 我发起一次请求,那服务器怎么知道我是谁?是谁发起的这次请求呢,  HTTP协议是无状态的协议, 浏览器的每一次请求,服务器都当做一 ...

  2. Boost Graph Library使用学习

    Boost Graph Library,BGL 使用学习 探索 Boost Graph Library https://www.ibm.com/developerworks/cn/aix/librar ...

  3. JAVA开发者大会-Spring Cloud网关分享

    新书购买:单本75折包邮

  4. Python3 使用企业微信 API 发送消息

    #coding=utf- import requests import json Secret = "TUbfeW8nFQakwOS4czm13SCnxSUPOqY2K0XHtM8XLT34 ...

  5. 大话设计模式Python实现-装饰模式

    装饰模式(Decorator Pattern):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 下面是一个给人穿衣服的过程,使用装饰模式: #!/usr/bin/en ...

  6. spring bean的三种管理方式·

    1.无参构造函数 1.xml文件配置内容 <!--无参构造函数--> <bean id="bean1" class="com.imooc.ioc.dem ...

  7. rem与em的使用和区别

    区别是:浏览器根据谁来转化成px值. 当使用rem单位,转换为像素大小取决于根元素的字体大小,即HTML元素的字体大小. 有一个比较普遍的误解,认为em单位是相对于父元素的字体大小.事实上,根据W3C ...

  8. sublime-text-3-build-3207 破解+注册码

    按照以下步骤依次进行 打开 https://hexed.it/ 单机 "Open file" 并选择 "sublime_text.exe" 可执行文件. 转到 ...

  9. 【CTS2019】珍珠(生成函数)

    [CTS2019]珍珠(生成函数) 题面 LOJ 洛谷 题解 lun题可海星. 首先一个大暴力\(sb\)的\(dp\)是设\(f[i][S]\)表示当前考虑完了前\(i\)个珍珠,\(S\)集合中这 ...

  10. navicat for mongodb12破解

    网上搜了一圈,都不管用.大多都有病毒,最后还是通过搜索github解决问题. 破解文件:https://github.com/DoubleLabyrinth/navicat-keygen/releas ...