让我们加密吧Let's encrypt
前言
如今的互联网越来越不安全,我们每个人的信息以及隐私不断被暴露,地下黑产盛行,经常收到垃圾短信,经常被陌生人的电话骚扰。我们的个人信息是怎么泄漏的呢?各种爬虫无时无刻不在互联网爬取着信息,各种嗅探工具无时无刻不在劫持着网络数据包,各种大大小小互联网公司因各种漏洞被脱库。互联网安全非常重要,如今很多大公司都强制使用https加密协议访问,安全性有了很大的提高,最起码数据包不能被劫持了,保证了客户端与服务器端通讯安全性。服端配置加密协议访问,在我的印象中是非常麻烦的,要搞老半天,而且不一定能跑起来。前段时间看了一篇讲解部署https的文章,整个过程简单自动化透明,而且证书是免费的,而且大部分主流操作系统主流浏览器都支持。在部署https之前需要对https协议以及CA证书以及CA有一定了解。
Let' encrypt
Let's encrypt是一家不以盈利为目的提供免费CA证书的机构,它旨在让全世界所有的互联网服务能够简单自动化部署加密协议,让https能够在所有的网站中普及。很多著名公司对其提供赞助,比如facebook,思科,mozilla等。它是对ACME(automated certificate management environment)协议的实现,只要实现了ACME协议的客户端都可以跟它交互。
实现原理
这里根据自己的理解简单描述下
1.生成用于授权对域名列表证书操作的RSA密钥对
2.客户端询问Let's encrypt获取证书需要做什么?
3.Let's encrypt告诉客户端需要验证是否真的持有域名以及授权私钥,怎么验证呢?告诉客户端把随机字符串保存在这个域名的根目录下指定命名的文件中以及对指定的字段使用授权私钥进行签名并回传

4.当客户端告诉Let's encrypt完成了指定的任务时,服端开始验证签名的有效性,开始通过域名访问指定生成的资源,当都验证通过时,服端认为当前客户端拥有指定域名,可以开始发证书了,当前密钥对被授权用于当前域名相关操作,当前密钥对被称之为账户授权密钥对

5.生成网站证书使用的RSA密钥对,请求获取证书时需要用到
6.根据协议生成CSR(certificate sign request)文件,发起CSR请求,请求Let's encrypt发DV(domain certificate)类型的证书

7.获得证书之后,web服务器就可以开始配置https了
获取证书
客户端选择
官方推荐的certbot需要安装比较多的依赖,而且比较重,尝试之后果断放弃了。因为平时使用PHP开发,所以也尝试使用了PHP编写的客户端,没有发现满意的,也果断放弃了。前几天在搜索我之前看到的那篇文章时,那篇文章没有搜索到,搜索到了其它相关的一些文章,其中有篇文章提到了一个很简洁的客户端acme_tiny,使用python实现的,看起来不错,就使用它了。
生成账户私钥对

设置验证域名合法性路径的服端配置并重启服务器(NGINX为例)
location ~ /.well-known/acme-challenge/(.*)? {
root /u01/server/cert/www;
try_files /$1 =404;
}
生成网站证书私钥对

生成CSR文件

获取证书
python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /u01/server/cert/www/ > ./signed.crt

获取中间证书
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem

合并证书
cat signed.crt intermediate.pem > chained.pem
NGINX服务器配置
server {
listen 443;
server_name yoursite.com;
charset utf-8;
root yourroot;
index index.php index.html index.htm;
ssl on;
ssl_certificate /u01/server/cert/chained.pem;
ssl_certificate_key /u01/server/cert/domain.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
}
chrome显示效果

需要注意的地方
1.证书有效期是90天
2.为了避免滥用,一周内同一个域名只能生成20次
3.开发客户端时,可以使用沙盒环境
4.为了避免证书过期,可以写一个shell脚本自动更新证书
5.使用第三方工具测试OpenSSL是否包含心脏漏血漏洞
6.Let's encrypt创建比较晚,很多老设备老终端老系统可能不能识别
7.脚本需要依赖一些python模块,按照提示安装即可
后记
整个部署过程挺顺利的,在部署之前花了一些时间了解相关的文档。使用安全加密协议是有代价的,响应速度比普通协议访问速度慢了将近一倍。
参考资料
【1】Let' encrypt
https://letsencrypt.org/
【2】How it works?
https://letsencrypt.org/how-it-works/
【3】证书签名
https://letsencrypt.org/certificates/
【4】acme协议
https://tools.ietf.org/html/draft-ietf-acme-acme-01
【5】let's encrypt docs
https://letsencrypt.org/docs/
【6】acme_tiny
https://github.com/diafygi/acme-tiny/tree/ecd26b1e784973e5b52d5a308964a8e29a6cf207
让我们加密吧Let's encrypt的更多相关文章
- SSL/TLS 加密新纪元 - Let's Encrypt
转自: https://linux.cn/article-6565-1.html SSL/TLS 加密新纪元 - Let's Encrypt 根据 Let's Encrypt 官方博客消息,Let's ...
- php密码对称encrypt加密
/** * 对用户的密码进行加密 * @param $password * @param $encrypt //传入加密串,在修改密码时做认证 * @return array/password */ ...
- .NET Core 常用加密和Hash工具NETCore.Encrypt
前言 在日常开发过程中,不可避免的涉及到数据加密解密(Hash)操作,所以就有想法开发通用工具,NETCore.Encrypt就诞生了.目前NETCore.Encrypt只支持.NET Core ,工 ...
- Android数据加密之Aes加密
前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes ...
- php使用openssl进行Rsa长数据加密(117)解密(128) 和 DES 加密解密
PHP使用openssl进行Rsa加密,如果要加密的明文太长则会出错,解决方法:加密的时候117个字符加密一次,然后把所有的密文拼接成一个密文:解密的时候需要128个字符解密一下,然后拼接成数据. 加 ...
- AES加密解密通用版Object-C / C# / JAVA
1.无向量 128位 /// <summary> /// AES加密(无向量) /// </summary> /// <param name="plainByt ...
- 【WP开发】加密篇:双向加密
说起双向加密,如果以前在.NET开发中弄过加/解密的朋友都不会陌生,常用的算法有DES.AES等.在RT应用程序中,也提供了加密相关的API,算法自然是一样的,只是API的封装方式不同罢了,因为RT不 ...
- PHP使用OPENSSL RSA加密解密数据
加密数据有很多种方法,今天我们来看一下OPENSSL RSA的加密办法. 1.首先得安装php的openssl扩展 php -m | grep openssl 执行以上命令,确保已经安装了openss ...
- iOS代码加密常用加密方式
iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...
随机推荐
- 如何自学编程,零基础适合学习Java或者Web前端吗,非科班的能学java吗?
很多人都会选择自学Java或者前端,相信有在校的大学生,有正在上班想转行的,也有已经在自学的.下面通过几个问题我来给大家分析学习编程的难易程度. 编程是什么? 通俗的理解,编程就是编写程序,哪什么是程 ...
- ORA-01075: you are currently logged on
[root@hear01 ~]# su - oracle[oracle@hear01 ~]$ sqlplus "/as sysdba" SQL*Plus: Release 11.2 ...
- Jquery课堂上课了,第一节Jquery选择器$
Jquery是优秀的Javascrīpt框架,$是jquery库的申明,它很不稳定(我就常遇上),换一种稳定的写法jQuery.noConflict(); jQue ...
- 将class类对象转化成json的数据格式
直接上代码: JSONObject的的使用需要导入json-lib-2.4-jdk15.jar包,下载地址:http://mvnrepository.com/artifact/net.sf.json- ...
- jQuery——stop
为什么要停止动画? 对同一个元素,如果拥有一个以上的动画对其加以作用,那么后面的动画会被放入一个动画队列中.动画队列的动画是在其上一个动画完成以后才会执行. 控制两个参数四种情况 1.第一个参数表示后 ...
- JS——动态添加事件和移除事件(有待补充...)
动态的添加事件:利用 attachEvent 和 addEventListener IE 支持 attachEvent: obj.attachEvent("onclick", Fo ...
- SQL基本操作——函数
函数的类型:在 SQL 中,基本的函数类型和种类有若干种.函数的基本类型是:Aggregate 函数.Scalar 函数. Aggregate 函数:操作面向一系列的值,并返回一个单一的值,下面是SQ ...
- Centos 安装 Moosefs文件系统
一.环境介绍Moosefs master:192.168.55.148Moosefs Metalogger:192.168.55.149Moosefs Chunk-01:192.168.55.150M ...
- UICollectionViewFlowLayout & UICollectionViewDelegateFlowLayout
A concrete layout object that organizes items into a grid with optional header and footer views for ...
- 为什么阿里规约手册要求谨慎使用Arrays.asList方法
前言 在开发中,有时候会碰到把多个参数,或者说把数组转成List的需求,通常我们会使用 Arrays.asList()方法.但是该方法在使用的过程中,稍有不慎就会出现严重的异常.有如下代码: @Tes ...