最近想搞一个网站玩玩,发布网站用https协议已经是大势所趋了。例如微信小程序,不使用https协议根本不让接入。所以,分享一下我尝试过的三种方法。

1.Linux自签(OPENSSL生成SSL自签证书)

2.阿里云免费证书

3.Let's Encrypt永久免费SSL证书【墙裂推荐】

一、Linux自签(OPENSSL生成SSL自签证书)

第1步:生成私钥

执行如下命令生成一个RSA私钥

//生成rsa私钥,des3算法,1024位强度,ssl.key是秘钥文件名。
openssl genrsa -des3 -out ssl.key 1024

然后他会要求你输入这个key文件的密码,由你随便设置。

由于以后要给nginx使用。每次reload nginx配置时候都要你验证这个PAM密码的。

但是生成时候必须输入密码。如果不想以后那么麻烦,生成之后可以执行如下命令再删掉。

openssl rsa -in ssl.key -out ssl.key
第2步:生成CSR(证书签名请求)

根据刚刚生成的key文件来生成证书请求文件,操作如下:

openssl req -new -key ssl.key -out ssl.csr

说明:执行以上命令后,需要依次输入国家、地区、城市、组织、组织单位、Common Name和Email。其中Common Name应该与域名保持一致。

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:GuangDong
Locality Name (eg, city) []:ShenZhen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:tsy
Organizational Unit Name (eg, section) []:tsy
Common Name (e.g. server FQDN or YOUR name) []:selfssl.hxkj.vip 这一项必须和你的域名一致
Email Address []:t@tsy6.com
第3步:生成自签名证书

根据以上2个文件生成crt证书文件,执行下面命令:

//这里3650是证书有效期(单位:天)。这个大家随意。最后使用到的文件是key和crt文件。
openssl x509 -req -days 3650 -in ssl.csr -signkey ssl.key -out ssl.crt

需要注意的是,在使用自签名的临时证书时,浏览器会提示证书的颁发机构是未知的。

第4步:安装私钥和证书

打开conf目录中的nginx.conf配置文件修改443端口监听配置。一般nginx配置文件默认路径为 /etc/nginx/nginx.conf,执行如下命令打开并修改:

vim /etc/nginx/nginx.conf    //路径是你的nginx配置文件路径

Nginx默认配置是将443端口的监听配置注释掉了的,如下:

# Settings for a TLS enabled server.
# server {
# listen 443;
# server_name localhost;
#ssl on;
#root /usr/share/nginx/html; #ssl_certificate "";
#ssl_certificate_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;
#
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
#}

将注释打开,并对其中部分内容进行修改,修改后如下:

# Settings for a TLS enabled server.
server {
listen 443;
server_name selfssl.hxkj.vip; //此处填写你自己的域名
ssl on;
root /usr/share/nginx/html; ssl_certificate "/home/ssl/ssl.crt"; //此处填写刚刚生成的ssl.crt文件路径
ssl_certificate_key "/home/ssl/ssl.key"; //此处填写刚刚生成的ssl.key文件路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on; location / {
} error_page 404 /404.html;
location = /40x.html {
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

修改配置并保存后,执行以下命令:

nginx -s reload

可使nginx重新加载配置,使配置生效。

OK,到这里就完成了使用Linux自签的方法配置https协议,大家也可访问我的页面来查看效果,地址:https://selfssl.hxkj.vip

tips:自签证书因为安全性很低,会被谷歌浏览器拦截

下面是证书检测详情

二、阿里云免费证书

第1步:登陆阿里云账号,选择证书服务

第2步:选择DV SS

第3步:选择Symantec

第4步:选择OV SSL

第5步:选择免费型DV SSL

第6步:好,经过曲折的选择完毕之后,购买,需要支付0元(免费的啦)

第7步:购买成功之后会返回证书控制台,然后点击补全信息

第8步:需要填写证书绑定的域名,根据自己的需求填写就OK

第9步:填写申请人的个人信息,如实填写就好

第10步:补全成功之后,会返回域名配置引导页,如图所示

第11步:打开自己的域名控制台,添加解析

第12步:给域名添加TXT记录,此处填写的是第10步的信息,如图所示

第13步:确认完毕之后,会自动返回证书配置页,可以进行配置检测



如果配置正确,左边会显示“DNS配置记录正确,请耐心等候”。否则的话,就是域名TXT记录配置错误,返回检查第12步的信息是否填写正确

第14步:一般10分钟之内就出结果了,配置正确的话,会自动返回这个页面,下载证书

第15步:安装证书,阿里教程挺详细的,就不做赘述了



下面是我的nginx配置内容,可供参考:

server {
listen 443;
server_name alissl.hxkj.vip;
ssl on;
root /usr/share/nginx/html; ssl_certificate "/home/alissl/214715369370158.pem";
ssl_certificate_key "/home/alissl/214715369370158.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on; location / {
} error_page 404 /404.html;
location = /40x.html {
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

修改配置并保存后,执行以下命令:

nginx -s reload

可使nginx重新加载配置,使配置生效。

OK,到这里就完成了使用阿里云免费证书的方法配置https协议,大家也可访问我的页面来查看效果,地址:https://alissl.hxkj.vip
下面是证书检测详情

三、Let's Encrypt免费证书

1:Let's Encrypt简介

Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。

Let's Encrypt免费SSL证书的出现,也会对传统提供付费SSL证书服务的商家有不小的打击。到目前为止,Let's Encrypt获得IdenTrust交叉签名,这就是说可以应用且支持包括FireFox、Chrome在内的主流浏览器的兼容和支持,虽然目前是公测阶段,但是也有不少的用户在自有网站项目中正式使用起来。

Let's Encrypt 的最大贡献是它的 ACME 协议,第一份全自动服务器身份验证协议,以及配套的基础设施和客户端。这是为了解决一直以来 HTTPS TLS X.509 PKI 信任模型,即证书权威(Certificate Authority, CA)模型缺陷的一个起步。在客户端-服务器数据传输中,公私钥加密使得公钥可以明文传输而依然保密数据,但公钥本身是否属于服务器,或公钥与服务器是否同属一个身份,是无法简单验证的。证书权威模型通过引入事先信任的第三方,由第三方去验证这一点,并通过在服务器公钥上签名的方式来认证服务器。第三方的公钥则在事先就约定并离线准备好,以备访问时验证签名之用。这个第三方就称为证书权威,简称CA。相应的,CA验证过的公钥被称为证书。问题是,如果服务器私钥泄露,CA无法离线使对应的证书无效化,只能另外发布无效记录供客户端查询。也就是说,在私钥泄露到CA发布无效记录的窗口内,中间人可以肆意监控服-客之间的传输。如果中间人设法屏蔽了客户端对无效记录的访问,那么直到证书过期,中间人都可以进行监控。而由于当前CA验证和签发证书大多手动,证书有效期往往在一年到三年。Let's Encrypt 签发的证书有效期只有90天,甚至希望缩短到60天。有效期越短,泄密后可供监控的窗口就越短。

2:部署Let's Encrypt证书

2.1 检查服务器是否安装Python与Git

检测Python指令

#检查Python的版本是否在2.7以上
python -v //2.7版本

如果没有安装Python的话,执行以下命令进行安装(如果检测到已安装则略过)

#安装python所需的包
yum install zlib-devel
yum install bzip2-devel
yum install openssl-devel
yum install ncurses-devel
yum install sqlite-devel
#获取到Python
cd /usr/local/src
wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
#解压Python2.7.12
tar -xvf Python-2.7.12.tar.xz
#编译python
cd Python-2.7.12/
./configure --prefix=/usr/local/python2.7
make && make install
#建立link
ln -s /usr/local/python2.7/bin/python2.7 /usr/local/bin/python
#解决系统 Python 软链接指向 Python2.7 版本后,因为yum是不兼容 Python 2.7的,所需要指定 yum 的Python版本
# vim /usr/bin/yum
将头部的
#!/usr/bin/python
改成
#!/usr/bin/python2.6.6

检测Git指令

#检查系统是否安装git
git --version

如果没有安装Git的话,执行以下命令进行安装(如果检测到已安装则略过)

#git 安装
yum install git
2.2 快速获取Let's Encrypt免费SSL证书

相较于第一种自签生成证书的方法,Let's Encrypt肯定是考虑到推广HTTPS的普及型会让用户简单的获取和部署SSL证书,所以可以采用下面简单的一键部署获取证书。

#获取letsencrypt
git clone https://github.com/letsencrypt/letsencrypt
#进入letsencrypt目录
cd letsencrypt
#生成证书 --email后填写自己的邮箱 -d 后面填写需要配置证书的域名(支持多个哦)
./letsencrypt-auto certonly --standalone --email t@tsy6.com -d hxkj.vip -d www.hxkj.vip

Let's Encrypt是支持绑定多域名的,上述两种方法都是只支持单域名。

2.3 Let's Encrypt免费SSL证书获取与应用

在完成Let's Encrypt证书的生成之后,我们会在"/etc/letsencrypt/live/hxkj.vip/"域名目录下有4个文件就是生成的密钥证书文件。

cert.pem  - Apache服务器端证书

chain.pem  - Apache根证书和中继证书

fullchain.pem  - Nginx所需要ssl_certificate文件

privkey.pem - 安全证书KEY文件

因为我的是Nginx环境,那就需要用到fullchain.pem和privkey.pem两个证书文件。修改nginx配置的详细过程,上面两种方法都提到了,这里不再赘述,以下我修改好的配置文件:

server {
listen 443;
server_name hxkj.vip www.hxkj.vip;
ssl on;
root /usr/share/nginx/html; ssl_certificate "/etc/letsencrypt/live/hxkj.vip/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/hxkj.vip/privkey.pem";
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; location / {
} error_page 404 /404.html;
location = /40x.html {
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
OK,到这里就完成了使用Let's Encrypt免费证书的方法配置https协议,大家也可访问我的页面来查看效果,地址:https://www.hxkj.vip
下面是证书检测详情

从上图可以看出,Let's Encrypt证书是有效期90天的,需要我们自己手工更新续期才可以。但是,身为程序员,可以自动执行的事,坚决不手动搞。

2.4 Let's Encrypt证书自动续期,实现真正的永久免费使用
2.4.1 编写shell脚本

执行以下命令,在"/etc/letsencrypt/live/hxkj.vip/"域名目录下创建脚本,方便管理

vim /etc/letsencrypt/live/hxkj.vip/updatessl.sh    //创建一个名字为updatessl的脚本

然后在脚本里添加如下代码

#!/bin/sh
/usr/local/src/Python-2.7.12/letsencrypt/certbot-auto renew --force-renew --pre-hook "service nginx stop" --post-hook "service nginx start"
#第一行是指此脚本使用/bin/sh 来执行
#第二行中--force-renew参数代表强制更新

退出并保存,然后给脚本添加可执行权限

// 这里的文件路径填写你自己的文件路径
chmod +x /etc/letsencrypt/live/hxkj.vip/updatessl.sh
2.4.2 创建定时任务

打开crontab文件

crontab -e

然后在文件末尾添加一行以下内容

0  0  28 *  * root /etc/letsencrypt/live/hxkj.vip/updatessl.sh   //我这里代表每月28号更新一次证书文件,文件路径填写你自己的文件路径

具体格式如下:

Minute Hour Day Month Dayofweek command

分钟 小时 天 月 天每星期 命令

每个字段代表的含义如下:

Minute 每个小时的第几分钟执行该任务

Hour 每天的第几个小时执行该任务

Day 每月的第几天执行该任务

Month 每年的第几个月执行该任务

DayOfWeek 每周的第几天执行该任务

Command 指定要执行的程序

在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。

记得重启crontab服务哦。好了,自动更新证书已经配置完了,再也不用担心证书过期啦!这也是我推荐使用这种方式生成证书的原因之一,没办法,懒啊~~~

四、总结

1.通过Linux自签方式生成签名文件,这种方式操作繁琐,安全性低,反正就是吃力不讨好,不推荐使用。
2.使用阿里云的免费证书,配置方便,唯一的缺点就是有效期只有一年,万一忘记更新就炸了。但是一年的时间也还好,可以考虑使用。
3.使用Let's Encrypt证书,安全性优良,各大厂商都支持,还能实现自动更新有效期,这种方式强烈推荐!!!

转载请注明出处:https://www.jianshu.com/p/eaad77ed1c1b

作者:TSY

个人空间:https://www.hxkj.vip

喜欢的话,可以关注下我的微信公众号

服务器配置https协议,三种免费的方法的更多相关文章

  1. JSON三种数据解析方法(转)

    原 JSON三种数据解析方法 2018年01月15日 13:05:01 zhoujiang2012 阅读数:7896    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  2. 同源策略(same-origin policy)及三种跨域方法

    同源策略(same-origin policy)及三种跨域方法 1.同源策略 含义: 同源是指文档的来源相同,主要包括三个方面 协议 主机 载入文档的URL端口 所以同源策略就是指脚本只能读取和所属文 ...

  3. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  4. 基于Modbus三种CRC16校验方法的性能对比

    目录 1.背景介绍 2. CRC校验的三种方法 2.1. 直接计算CRC校验 2.2. 查短表法计算CRC16校验 2.3.查大表法计算CRC16校验 3.三种校验方式的测试方法 3.1.直接计算CR ...

  5. halcon三种模板匹配方法

    halcon有三种模板匹配方法:即Component-Based.Gray-Value-Based.Shaped_based,分别是基于组件(或成分.元素)的匹配,基于灰度值的匹配和基于形状的匹配,此 ...

  6. iOS——浅谈iOS中三种生成随机数方法

    ios 有如下三种随机数方法:

  7. Sencha 基础Demo测试,三种showView的方法

    直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...

  8. Entity Framework关联实体的三种加载方法

    推荐文章 EF性能之关联加载 总结很好 一:介绍三种加载方式 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌 ...

  9. List 三种遍历的方法

    学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象,测试代码如下: package ...

随机推荐

  1. CQ18阶梯赛第二场

    H国的身份证号码I HihoCoder - 1558 只要单纯的判断一下前后的乘积就好了, 因为不是很想处理倍数的关系, 所以我这里是用 string去处理. 代码: #include<bits ...

  2. 【Distributed】缓存技术

    一.缓存概述 1.1 缓存技术分类 1.2 缓存框架分类 1.3 Session理解的误区 二.基于Map集合实现本地缓存 2.1 定义Map缓存工具类 2.2 使用案例 三.Ehcache 缓存框架 ...

  3. struts2表单提单细节处理

    1. 上传文件 大部分项目避免不了要上传文件. struts2提供了封闭的上传文件的入口, 网络上也存在大量的插件用于网页表单中上传文件. 由于自己习惯用SSH框架, 所以介绍一下struts2中文件 ...

  4. DNA sequence(映射+BFS)

    Problem Description The twenty-first century is a biology-technology developing century. We know tha ...

  5. 一文轻松搞懂Vuex

    概念: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式(官网地址:https://vuex.vuejs.org/zh/).它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状 ...

  6. charles 启用/禁用断点

    本文参考:charles 启用/禁用断点 1.3. enable/disable breakpoints 和 2.3 breakpoints settings 断点设置是常用的了,没啥好说的了,可以设 ...

  7. MOOC C++笔记(一):从C到C++

    第一周:从C到C++ 引用 概念 类型名&引用名=某变量名 某个变量的引用,等价于这个变量,相当于该变量的别名 注意事项 1.定义引用时一定要将其初始化成引用某个变量. 2.初始化后,它就一直 ...

  8. AsyncLocal和Async原理解读

    AsyncLocal 的实现很简单,将AsyncLocal实例和当前线程的值以键值对的形式保存在Thread.CurrentThread.ExecutionContext.m_localValues. ...

  9. asp.net core + layui.js 搭建仓储系统

    先放几张网站图片: 第一步先从layui 网站https://www.layui.com/doc/ 下载相关文件,复制到项目 wwwroot 目录下: 然后在 _Layout.cshtml 中引用 l ...

  10. Leetcode 96.不同的搜索二叉树

    给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / ...