HTTPS 证书加密、解密过程解析

HTTPS 证书加密、解密过程解析

HTTPS 加密

https 是最流行的 http 安全形势,所有主流浏览器和服务器都支持此协议。所有http请求和响应数据在发送到网络之前都需要经过安全层加密(SSL or TLS: transport layer security)

2019-8-25@21:58:6

图解加密过程

HTTPS 采用混合加密系统和会话密钥:使用非对称加密方式建立起安全通信,通过安全通道产生的随机对称密钥,通过更快的对称加密技术对报文进行加密。

2019-8-27@23:48:13

SSL 握手

  1. 交换协议版本
  2. 选择加密方式
  3. 身份认证
  4. 生成临时会话密钥用来加密通信

数字加密

  1. 对称加密:AES,RC4,3DES
  2. 非对称加密:RSA,DSA/DSS
  3. HASH算法:MD5,SHA1,SHA256

获取证书

  1. 自己生成(会有警告提示)
  2. 机构颁发(浏览器通过颁发机构校验证书安全性)

Nginx 配置 HTTPS

PS:阿里云、七牛云等都有1年期免费DV证书,可以尽情申请...

  1. 申请SSL证书(通常是v3)
  2. 认证域名
  3. 获得 blog.monogogo.cn.key、blog.monogogo.cn.pem 文件

nginx.conf:

# 将http重定向到https
server {
    listen 80;
    server_name "blog.monogogo.cn";
    gzip on;
    rewrite ^(.*) https://$server_name$1 permanent;
}

server {
    listen 443;
    server_name "blog.monogogo.cn";
    ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate      cert/blog.monogogo.cn.pem;
    ssl_certificate_key  cert/blog.monogogo.cn.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_intercept_errors on;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host monogogo.cn:8000;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header Connection "";
        proxy_pass       http://monogogo.cn:8000;
    }
    error_page  403             /403.html;
    location = /403.html {
            root   /usr/local/nginx/html;
    }

    error_page 404                      /404.html;
    location = /404.html {
            root  /usr/local/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
            root   /usr/local/nginx/html;
    }
    access_log logs/https.blog.monogogo.cn_access.log;

}

参考HTTPS站点

开启 https 的站点必须全站 https,否则 image、js、css 等静态资源依然容易被篡改,从而影响站点安全性。ps:开启后地址栏会显示一个小锁,认证等级高的机构可以显示机构信息(比如:github.com)

blog.monogogo.cn

2019-8-28@0:17:57

HTTPS 劫持

中间人劫持攻击

中间人截取客户端发送给服务器的请求,伪装成客户端与服务器进行通信,并将服务器发给客户端的信息的内容发送给客户端,伪装成服务器与客户端进行通信。此时中间人要让客户端信任中间人的证书本地生成证书不被信任,需要机构颁发证书,如果攻击者申请到了一张和你的网站一样的证书,那你网站的安全机制也就不复存在了。

证书劫持

  1. CA 机构有意无意会签发一些错误的证书,比如 CA 机构没有正确校验申请者的身份。
  2. CA 机构是一个追求盈利的机构,在利益的驱动下,可能会无节制的签发证书,如果签发一个恶意的二级 CA 证书,带来的危害更大。
  3. 攻击者会通过各种技术攻击手段,冒充或者伪造某个域名的拥有者申请证书

中间人攻击的预防:

  1. 证书校验,针对安全性比较高的app,可以采用客户端预埋证书的方式锁死证书,只有当客户端证书与服务端证书完全一致的情况下才允许通信。证书过期必须强制更新。
  2. 证书透明度(简称CT)
    1. CA 机构监控恶意证书
    2. 网站拥有者监控对应域名证书签发过程(及时联系 CA 机构吊销证书)
    3. 浏览器厂商证书审计

证书透明度(Certificate Transparency)

证书透明度(Certificate Transparency)是谷歌力推的一项拟在确保证书系统安全的透明审查技术。其目标是提供一个开放的审计和监控系统,可以让任何域名的所有者,确定CA证书是否被错误签发或恶意使用。TLS的缺点是你的浏览器隐性包含了一个大型受信任CA列表。如果任何这些CA恶意为域创建新证书,则你的浏览器都会信任它。CT为TLS证书信任提供了额外的安全保障:即公司可以监控谁为他们拥有的域创建了证书。此外,它还允许浏览器验证给定域的证书是否在公共日志记录中。

ct-exposer

ct-exposer将查询给定域的CT日志,然后尝试对域进行DNS查找以获取DNS中存在的域。根据我的经验,到目前为止ct-exposer为我查找到了许多使用“site:domain.com”谷歌搜索找不到的子域。请记住,无法解析的域可以是旧域或仅是内部域(例如:你需要访问内部DNS服务器才能解析它们)。

Read more

Flutter入门指南

Flutter入门指南

Flutter 是一个由 Google 开发的开源移动应用开发框架。它允许开发者使用一套代码同时构建 iOS 和 Android 应用,并且提供了丰富的 UI 组件和高效的开发工具,使得开发者能够快速构建出高性能的跨平台应用。 一、Flutter 的实现原理 Flutter 的核心在于其自带的高性能渲染引擎 Skia。不同于其他框架依赖于原生的 UI 组件,Flutter 直接通过 Skia 渲染引擎将所有组件绘制到屏幕上。这种方式保证了跨平台应用在 iOS 和 Android 上的表现完全一致。 1.1 结构概览 Flutter 的架构分为三层: 1. Framework(框架层): 这部分主要由 Dart 编写,提供了 Flutter 的各种 UI 组件(Widget)、手势检测、渲染层以及动画等。

By Lewis
Certbot Let's Encrypt 证书自动续期

Certbot Let's Encrypt 证书自动续期

安装 Certbot yum install epel-release -y yum install certbot -y certbot certonly //生成证书 certbot renew //续期 certbot certificates //查看证书 域名验证插件 https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au 下载 $ git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au $ cd certbot-letencrypt-wildcardcertificates-alydns-au $ chmod 0777 au.sh 配置 DNS API 密钥: 这个 API 密钥什么意思呢?由于需要通过 API 操作阿里云 DNS,

By Lewis