最近想搞一个网站玩玩,发布网站用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. poj 2406 Power Strings(kmp next的应用)

    题目链接:http://poj.org/problem?id=2406 题意:就是求一个字符串最多有几个相同的小字符串组成. 题解:直接求一下next然后找到长度,长度就是len-1-next[len ...

  2. SecureCRT安装及破解

    ### SecureCRT简介  > SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件. > &g ...

  3. Windows下升级Zabbix Agent

    这段时间因工作上不太忙,就着手升级下zabbix,从3升级到最新版4.2,服务器端升级还挺快,就是客户端比较耗时了,往往就是看的越简单的东西越耗时间啊. Windows版本的zabbix agent下 ...

  4. getMeasuredHeight()与getHeight() 以及MeasureSpec.getSize()

    getMeasuredHeight()返回的是原始测量高度,与屏幕无关,getHeight()返回的是在屏幕上显示的高度.实际上在当屏幕可以包裹内容的时候,他们的值是相等的,只有当view超出屏幕后, ...

  5. SpannableString设置文本背景色

    参考内容: http://blog.csdn.net/harvic880925/article/details/38984705 http://blog.it985.com/14433.html 1. ...

  6. MySQL中几个重要的文件

    一.数据库层面 错误日志文件(error log) 二进制日志文件(binary log) 慢查询日志(slow log) 全量日志(general log):general log 会记录MySQL ...

  7. spring boot 配置文件加密数据库用户名/密码

    这篇文章为大家分享spring boot的配置文件properties文件里面使用经过加密的数据库用户名+密码,因为在自己做过的项目中,有这样的需求,尤其是一些大公司,或者说上市公司,是不会把这些敏感 ...

  8. 松软科技课堂:SQL--FULLJOIN关键字

    SQL FULL JOIN 关键字(from:www.sysoft.net.cn) 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行. FULL JOIN 关键字语法 SELECT col ...

  9. 新建web工程

    1.选择新建Dynamic  Web Project 2.选择服务器和版本(2.5) 3.WebContend目录下新建一个html文件 4.运行 工程的目录结构: WEB-INF目录时受保护的,不能 ...

  10. Android Studio 3.1.3填坑之路

      昨天编写程序的时候,遇到了一个非常令人头疼的BUG,如下图:   标题栏和里面的内容都消失了,这对于一个非常在乎排版的软件来说简直就是晴空霹雳,搞了好长时间,终于在今天找到解决方法,原来是升级搞的 ...