1 概述

acme.sh实现了acme协议,可以从Let‘s Encrypt生成免费的ssl证书用于实现https,本文介绍了常见的两种服务器Apache与Nginx上利用acme.sh配置https服务。

约定:

APACHE_INSTALL_DIR  ---   Apache安装目录
NGINX_INSTALL_DIR --- Nginx安装目录
www.test.com --- 测试域名,请按需要换成自己的域名

2 准备工作

  • 一个域名
  • 一台云服务器

2.1 域名与服务器

域名与服务器直接买就好了,笔者的都是在阿里云上买的。

2.2 域名解析

需要确保域名可以解析到对应的ip上面,一般的域名购买商会提供解析服务,按图形界面操作即可,以阿里云为例,选择域名进行解析:



主机记录填www,记录值填服务器公网ip.



间隔十分钟左右可以ping一下自己的域名,如果显示服务器ip则解析成功。

2.2 端口

服务器要开启80与443端口,80用于HTTP测试,443用于HTTPS访问。以阿里云为例:









3 Nginx

Nginx有两种安装方式,一种是仓库形式安装,另一种是从源码编译安装。

3.1 编译安装的Nginx(1.17.9)

3.1.1 安装Nginx

先去下载源码,上传到服务器,解压:

tar -zxvf nginx-1.17.9.tar.gz
cd nginx-1.17.9

可以先使用

./configure --help

查看选项帮助,这里要注意一下pcre与openssl,是源码目录,不是安装目录,安装之后删了源码的,重新来这里下载pcre这里下载openssl,注意一定需要http_ssl_module这个模块,不要漏了。

./configure --prefix=/xxxxx --with-pcre=/xxxxx --with-openssl=/xxxx --with-http_ssl_module
make
sudo make install

好了之后进入安装目录下的sbin,启动服务。

cd NGINX_INSTALL_DIR/sin
./nginx

然后可以在浏览器输入服务器公网ip测试一下:

3.1.2 证书处理

首先安装acme.sh

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



生成证书

acme.sh --issue -d www.test.com --webroot NGINX_INSTALL_DIR/html

webroot的话就直接使用Nginx的默认文档根目录。好了之后会看到这样的提示:



接着安装证书:

acme.sh --installcert \
-d www.test.com \
--keypath /xxxx/xxx.key \
--fullchainpath /xxx/xxx.pem

路径与名字随便,后缀不能变。

3.1.3 Nginx配置

修改Nginx配置文件:

cd NGINX_INSTALL_DIR/conf
cp nginx.conf nginx.conf.bak
vim nginx.conf

找到HTTPS server这一行,这里是96行,把从server开始到最后一个花括号的代码全部去掉注释。



然后修改这三行,server_name填域名,ssl_certificate填刚才的pem文件路径,ssl_certificate_key填刚才的key文件路径。路径建议绝对路径,可以不加双引号。



记得记得要加上一行ssl协议:

3.1.4 测试

可以先使用-t测试语法错误:

cd NGINX_INSTALL_DIR/sbin
./nginx -t

ok的话,重启服务并输入域名测试:

cd NGINX_INSTALL_DIR/sbin
./nginx -s stop
./nginx





成功!

3.2 从仓库安装Nginx(1.16.1)

3.2.1 安装Nginx

从仓库安装就简单多了,一行就可以了,系统Centos,其他自行搜索:

yum install nginx

可以先测试一下,直接用

nginx

开启服务,然后浏览器输入公网ip:



(笔者有点怀疑是不是装了个假的Nginx,两个的主页居然不一样。。。。)

3.2.2 证书处理

没安装acme.sh的先安装:

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

申请证书:

acme.sh --issue -d www.test.com --webroot /usr/share/nginx/html

安装证书:

acme.sh --installcert \
-d www.test.com \
--keypath /xxxx/xxx.key \
--fullchainpath /xxx/xxx.pem

3.2.3 Nginx配置

同样先备份:

cd /etc/nginx
cp nginx.conf nginx.conf.bak
vim nginx.conf

这里的配置比编译安装的又多了不少,一样从server(61行)开始去掉注释:



然后修改三行:



server_name填域名,ssl_certificate填pem文件,ssl_certificate_key填key文件。

最后增加一行ssl协议:

3.2.4 测试

可以先用-t测试语法错误:

nginx -t

ok的话重启服务:

nginx -s stop
nginx

浏览器输入域名访问:



4 Apache

Apache也有两种安装方式,从源码编译安装与从仓库安装。

4.1 编译安装的Apache(2.4.41)

4.1.1 安装Apache

编译安装Apache比较麻烦,需要安装pcre,apr,apr-util,生成Makefile时需要指定以下几个选项:

--with-apr \
--with-apr-util \
--with-pcre \
--enable-ssl \
--with-ssl

具体可以看这里

安装好了之后需要先确定ssl模块是否存在:

cd APACHE_INSTALL_DIR/modules
ls | grep ssl

如果没有显示mod_ssl.so,则需要重新安装,确定生成Makefile时没有漏掉

--enable-ssl

--with-ssl

如果有ssl模块,直接修改配置文件测试一下。

cd APACHE_INSTALL_DIR/conf
vim httpd.conf

修改ServerName为

localhost:80



启动服务输入localhost测试:

cd APACHE_INSTALL_DIR/bin
./apachectl

页面只有一行It works!:



(话说这和仓库安装的Apache首页差距这么大。。。)

4.1.2 证书处理

没安装acme.sh的先安装:

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

申请证书:

acme.sh --issue -d www.test.com --webroot APACHE_INSTALL_DIR/htdocs

这里webroot为Apache默认的文档根目录.

安装证书:

acme.sh --installcert -d www.test.com \
--key-file /xxxx/xxx.key \
--cert-file /xxxx/xxxx.crt \
--fullchain-file /xxx/xxxfullchain.crt

路径与名字随便,后缀名不能变。

4.1.3 Apache配置

首先修改conf/httpd.conf:

cd APACHE_INSTALL_DIR/conf
cp httpd.conf httpd.conf.bak
vim httpd.conf







找到这三行,去掉注释。

然后修改httpd-ssl.conf:

cd extra
cp http-ssl.conf http-ssl.conf.bak
vim httpd-ssl.conf



DocumentRoot可以默认,ServerName改成

www.test.com:443

然后修改这三行,把证书的文件相应填入。

4.1.4 测试

语法检查:

cd APACHE_INSTALL_DIR/bin
./apachectl -t

没有错误之后重启服务:

./apachectl stop
./apachectl

浏览器输入域名访问:



4.2 从仓库安装的Apache(2.4.6)

4.2.1 安装Apache

yum install httpd

修改配置文件并进行测试:

cd /etc/httpd/conf
cp httpd.conf httpd.conf.bak
vim httpd.conf

找到ServerName改成

localhost:80



开启服务后输入localhost:80.

systemctl start httpd



另外要确保ssl模块存在:

cd /etc/httpd/modules
ls | grep ssl

如果没有输出的话,证明没有ssl模块,需要安装:

yum install mod_ssl

再一次grep:

ls | grep ssl

4.2.2 证书处理

没安装acme.sh的先安装:

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

申请证书:

acme.sh --issue -d www.test.com --webroot /var/www/html

其中/var/www/html为Apache默认文档根目录。

安装证书:

acme.sh --installcert -d www.test.com \
--key-file /xxxx/xxx.key \
--cert-file /xxxx/xxxx.crt \
--fullchain-file /xxx/xxxfullchain.crt

4.2.3 Apache配置

修改ssl.conf:

cd /etc/httpd/conf.d
cp ssl.conf ssl.conf.bak
vim ssl.conf



修改ServerName与DocumentRoot,ServerName填域名,DocumentRoot直接去掉注释。接着修改以下三行,根据刚才生成的三个文件对应填入即可。

4.2.4 测试

apachectl -t

没有语法错误就重启服务:

systemctl stop httpd
systemctl start httpd

浏览器输入访问:

5 总结

其实这里采用了比较麻烦的方式手动安装证书,acme.sh其实还有更简单的不需要webroot的命令:

acme.sh --issue -d www.test.com --apache
acme.sh --issue -d www.test.com --nginx

另外还可以通过手动dns的方式:

acme.sh --issue -d www.test.com --dns dns_xxx

这种方式可以利用域名解析商提供的api自动添加记录完成认证,可以参考这里

另外文章没有说到证书过期更新的问题,可以看官方中文说明,这里

除此之外还可以利用openssl使安全性的评分更高,测试网站这里修改配置这里

还有最后一个,现有云服务器厂商提供了免费的证书购买,如阿里云,可以直接购买免费证书然后利用文档安装到服务器上。

祝你们早日有一个属于自己的https的网站。

Nginx/Apache + acme.sh 实现https访问的更多相关文章

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

    acme.sh 简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书.acme.sh 有以下特点:一个纯粹用Shell(Unix shell)语言编写的 ...

  2. Nginx配置http跳转https访问

    Nginx强制http跳转https访问有以下几个方法 nginx的rewrite方法 可以把所有的HTTP请求通过rewrite重写到HTTPS上 配置 方法一 server{ listen ; s ...

  3. 阿里云Ubuntu 14.04 + Nginx + let's encrypt 搭建https访问

    参考页面: https://certbot.eff.org/#ubuntutrusty-nginx http://bbs.qcloud.com/thread-12059-1-1.html http:/ ...

  4. nginx配置ssl证书实现https访问

    一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址:47.89.12.99 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的 ...

  5. 阿里云 nginx配置ssl证书实现https访问

    一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址:47.89.12.99 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的 ...

  6. nginx/apache静态资源跨域访问问题详解

    1. apache静态资源跨域访问 找到apache配置文件httpd.conf 找到这行 #LoadModule headers_module modules/mod_headers.so把#注释符 ...

  7. [转帖]nginx配置ssl证书实现https访问

    https://www.cnblogs.com/tianhei/p/7726505.html 今天就是如此处理的 感觉挺不错的. 一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址 ...

  8. Nginx配置SSL证书实现https访问「浏览器未认证」

    http 和 https 介绍 http:应用最广泛的一种网络协议,是一个B/S的request和response的标准,用于从www服务器传输超文本到本地浏览器的传输协议. https:以安全为目标 ...

  9. centos7 nginx配置ssl证书实现https访问同时http访问

    1,首先将你申请到的nginx 分类下的ssl证书上传到nginx的config下(可以新建一个目录叫ssl.) 2.修改nginx的config配置 server {listen 80;(监听80端 ...

随机推荐

  1. 关于Java中的对象、类、抽象类、接口、继承之间的联系

    关于Java中的对象.类.抽象类.接口.继承之间的联系: 导读: 寒假学习JavaSE基础,其中的概念属实比较多,关联性也比较大,再次将相关的知识点复习一些,并理顺其中的关系. 正文: 举个例子:如果 ...

  2. webpack理解

    打包工具 可以将多个静态文件打包成一个静态文件例如将1.js.2.js.3.css打包成h.js一个静态文件 这样做的好处是:可以减少页面的请求次数 以往是请求多个静态页面,使用webpack后会减少 ...

  3. 无所不能的Embedding7 - 探索通用文本表达[FastSent/InferSent/GenSen/USE]

    在4/5章我们讨论过用skip-thought,quick-thought任务来进行通用文本向量提取,当时就有一个疑问为什么用Bookcorpus这种连续文本,通过预测前一个和后一个句子的方式得到的文 ...

  4. 几个小实践带你快速上手MindSpore

    摘要:本文将带大家通过几个小实践快速上手MindSpore,其中包括MindSpore端边云统一格式及华为智慧终端背后的黑科技. MindSpore介绍 MindSpore是一种适用于端边云场景的新型 ...

  5. 元类、orm

    目录 一.内置函数exec 二.元类 1. 什么是元类 2. 元类的作用 3. 创建类的两种方法 4. 怎么自定义创建元类 三.ORM 1. ORM中可能会遇到的问题 2. ORM中元类需要解决的问题 ...

  6. C++教程01:计算机系统的组成

    教程首发 | 公众号:lunvey 学习C++之前,需要先了解一点基础的计算机知识.毕竟C++是跑在计算机系统上的,我们写的程序都是一段段的指令集. 首台计算机ENIAC问世之后,缺少原理指导.冯诺依 ...

  7. JPEG解码——(5)反量化和逆ZigZag变换

    本篇是该系列的第五篇,承接上篇huffman解码,介绍接下来的两个步骤--反量化和逆zigzag变换,即IDCT前的两个步骤. 需要说明的是,这两个步骤可以颠倒,本人的实现是,先反量化,再逆ZigZa ...

  8. STM32 ADC详细篇(基于HAL库)

    一.基础认识 ADC就是模数转换,即将模拟量转换为数字量 l  分辨率,读出的数据的长度,如8位就是最大值为255的意思,即范围[0,255],12位就是最大值为4096,即范围[0,4096] l  ...

  9. WAV16T VPX国产化千兆交换板

      WAV16T是基于盛科CTC5160设计的国产化3U三层千兆VPX交换板,提供16路千兆电口,采用龙芯 2K1000处理器.支持常规的L2/L3协议,支持Telnet.SNMP.WEB,CLI等多 ...

  10. vue 仿zTree折叠树

    需求: vue实现仿zTree折叠树,此文章仅作为记录文档. 实现: <template> <div class="line-tree"> <div ...