文档章节

[每日短篇] 24 - HTTPS 和 SSL 自签名证书的现代知识

Maxwell1987
 Maxwell1987
发布于 11/06 02:50
字数 1122
阅读 635
收藏 5

今天因故需要测试 SSL 自签名证书,在翻阅资料时发现中文社区介绍 HTTPS 和 SSL 证书的网帖不仅陈旧而且存在不少同源的错误,一旦错误内容到处都是就容易被人当成正确的,所以写一篇帖子更新一下现代知识和更正一些错误观点。现在是 2019-11-06,如果很久以后看到这篇帖子,其中与协议版本、密钥强度相关的内容已经过时了,请注意识别。

关于 HTTPS

  • HTTPS 是 HTTP 的扩展,重点解决传输安全的问题,以前是 HTTP over SSL,新的是 HTTP over TLS。需要注意的是 HTTPS 解决的是传输安全,防范窃听、中间人攻击之类的,不解决两端的安全问题,见过一些系统中试图用 HTTPS 解决防客户端破解的问题,实际上是没有任何用处的。
  • 一般场景下只有客户端验证服务器的证书,客户端不向服务器提供证书。对安全性要求特别高又高不到需要额外硬件支持的时候,还可以双向验证证书,比如早期的网银、支付宝会需要申请数字证书,自己下载安装之后,登录时需要向服务器提供证书验证客户端身份。

关于 SSL 和 TLS

  • SSL 和 TLS 也有多个版本,按照 Google、Mozilla、Cloudflare 等大厂的认识,为现代客户端提供的服务应该使用 TLSv1.3,为远古客户端提供的服务应该向下支持到 TLSv1,为不太古老的客户端提供的服务可以使用 TLSv1.2 TLSv1.3。这跟国内状况差别巨大,国内还在大量使用远古客户端都不应该支持的 SSLv3,要是用到 TLSv1.3 也常会被抱怨版本太高。
  • 密钥位数现在推荐 2048 位,1024 位的现代浏览器都会吐槽不安全。
  • SSL 证书有几种分类方式,其中一种是根据域名格式分的,*.xxx.yyy.zzz 叫做泛域名证书,不包含 xxx.yyy.zzz 本身。
  • SSL 证书支持对 IP 签发,与对域名签发一样,签发之后任意端口可用。
  • Cipher 也分强弱,TLSv1.2 里也有弱密钥算法,要用 TLSv1.2 的话 Mozilla 推荐 ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384,TLSv1.3 目前看都还行。
  • 在 Nginx 里如果只用 TLSv1.3 的话,不要添加 ssl_ciphers 指令,即使指定的是 TLSv1.3 的几个 cipher 也照样报错,不写就没错了。如果是同时用几个版本,也不需要在 ssl_ciphers 里面写 TLSv1.3 的 cipher。
  • 签发一个证书不会让另外一个证书失效,在一个新服务器上使用证书也不会让老服务器上的同一个证书失效。CA 那里有让证书失效的机制,第一需要人为申请,第二需要客户端知道要到网上查且能到网上查某个证书的有效性,所以这个机制并不总是能够生效。

关于自签名

  • 很多网帖里面(包括英文帖子)提到自签名第一步生成私钥时需要输入密码,并且还要第二步去掉密码,实际上罪魁祸首是命令里面的 -des3,这个参数的作用是用 DES3 加密私钥,那不要密码就怪了。蛮奇怪第一个这么写帖子的人在想啥,后面的人抄的时候在想啥。
  • 如果没加 -des3 也要输入密码,试试 -nodes 参数,有些系统缺省参数不一样,可能需要显式禁用加密私钥。
  • 自签名密钥也记得改 2048,强度跟是否受信是两码事。
  • 访问自签名网址时注意看浏览器的风险提示,是这个证书是自签名的还是这个证书跟域名不匹配,提示是自签名的服务器就配置对了,不然就还得继续改。

© 著作权归作者所有

Maxwell1987

Maxwell1987

粉丝 34
博文 81
码字总数 46599
作品 0
济南
程序员
私信 提问
加载中

评论(2)

我叫金正恩
我叫金正恩
必定无脑转发的多😄
Maxwell1987
Maxwell1987 博主
洗稿的也很多,好多帖子步骤举例都一样,前后加一点东西就标原创
Android--Https编程

概述 SSL(Secure Sockets Layer 安全套接层),为网景公司(Netscape)所研发,用以保障在Internet 上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取...

sealin
2017/12/08
0
0
HTTP与HTTPS区别、nginx配置

协议层了解: 概念描述: SSL层是如何加密的,我们都知道非对称加密,一般网站如果希望支持https就需要向权威机构购买证书,证书包含一个公钥和私钥对,公钥发送给客户端,客户端使用这个公钥...

408582708
2016/09/08
108
0
Nginx + openssl 搭建https服务

近期忙着和第三方短信公司对接短信上行接口。给予https和digest认证方式进行数据的传输。digest认证由前端phper进行实现,我需要完成nginx+ssl实现https服务。ssl使用openssl自己进行制作。 ...

david_bj
2015/02/11
0
0
apache 配置 https

Ubuntu下HTTPS配置非常简单,对大部分用户而言,使用普通的自签名证书,只需按照步骤进行就可以了,无需了解密钥、证书的更多知识,更深的背景知识还有RSA算法、DES算法、X509规范、CA机构....

hejunyi1204
2014/02/12
0
0
Tomcat6和Tomcat7配置SSL通信的比较

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/9430333 《Tomcat6和Tomcat7配置SSL通信的比较》作者:chszs,转载需注明。博客...

chszs
2013/07/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka实战(五) - 核心API及适用场景全面解析

1 四个核心API ● Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。 ● Consumer API 允许一个应用程序订阅一个或多个topic ,并且对发布给他们的流式数据进行处...

JavaEdge
24分钟前
7
0
实现线程的第三种方式——Callable & Future

Callable Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个...

ytuan996
今天
9
0
OSChina 周六乱弹 —— 不要摁F了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 朴树写的词曲都给人一种莫名的失落感,不过这首歌他自己却没有唱,换成赵传这种高音阶嘶喊的确很好,低沉但却有力,老男人的呐喊...

小小编辑
今天
10
0
Android Binder机制 - interface_cast和asBinder讲解

研究Android底层代码时,尤其是Binder跨进程通信时,经常会发现interface_cast和asBinder,很容易被这两个函数绕晕,下面来讲解一下: interface_cast 下面根据下述ICameraClient例子进行分析...

天王盖地虎626
昨天
13
0
计算机实现原理专题--存储器的实现(二)

计算机实现原理专题--存储器的实现(一)中描述了一种可以记住输入端变化的装置。现需要对其功能进行扩充,我们将上面的开关定义为置位,下面的开关定义为复位,然后需要增加一个保持位,当保...

FAT_mt
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部