相关阅读:

Spring 核心框架体系结构


今天摸索了下 HTTPS 的证书生成,以及它在 Nginx 上的部署。由于博客托管在 github 上,没办法部署证书,先记录下,后续有需要方便快捷操作。本文的阐述不一定完善,但是可以让一个初学者了解大致的原理,同时跟着操作可以为自己的博客/网站部署一个 HTTPS 证书。

  网站部署 HTTPS 的重要性

  看看下面,部分电信用户访问京东首页的时候,会看到右下角有一个浮动广告:

  小白用户以为是京东有意放置的,细心的用户会发现,这个 iframe 一层嵌一层的恶心广告很明显是电信/中间人通过 DNS 劫持注入进去的,十分恶心,没有关闭按钮。

  随着互联网的快速发展,我们几乎离不开网络了,聊天、预订酒店、购物等等,我们的隐私无时无刻不暴露在这庞大的网络之中,HTTPS 能够让信息在网络中的传递更加安全,增加了 haker 的攻击成本。

  HTTPS 区别于 HTTP,它多了加密(encryption),认证(verification),鉴定(identification)。它的安全源自非对称加密以及第三方的 CA 认证。

  简述 HTTPS 的运作

  如上图所示,简述如下:

  • 客户端生成一个随机数 random-client,传到服务器端(Say Hello)

  • 服务器端生成一个随机数 random-server,和着公钥,一起回馈给客户端(I got it)

  • 客户端收到的东西原封不动,加上 premaster secret(通过 random-client、random-server 经过一定算法生成的东西),再一次送给服务器端,这次传过去的东西会使用公钥加密

  • 服务器端先使用私钥解密,拿到 premaster secret,此时客户端和服务器端都拥有了三个要素:random-client、random-server 和 premaster secret

  • 此时安全通道已经建立,以后的交流都会校检上面的三个要素通过算法算出的 session key

  CA 数字证书认证中心

  如果网站只靠上图运作,可能会被中间人攻击,试想一下,在客户端和服务端中间有一个中间人,两者之间的传输对中间人来说是透明的,那么中间人完全可以获取两端之间的任何数据,然后将数据原封不动的转发给两端,由于中间人也拿到了三要素和公钥,它照样可以解密传输内容,并且还可以篡改内容。

  为了确保我们的数据安全,我们还需要一个 CA 数字证书。HTTPS的传输采用的是非对称加密,一组非对称加密密钥包含公钥和私钥,通过公钥加密的内容只有私钥能够解密。上面我们看到,整个传输过程,服务器端是没有透露私钥的。而 CA 数字认证涉及到私钥,整个过程比较复杂,我也没有很深入的了解,后续有详细了解之后再补充下。

  CA 认证分为三类:DV ( domain validation),OV ( organization validation),EV ( extended validation),证书申请难度从前往后递增,貌似 EV 这种不仅仅是有钱就可以申请的。

  对于一般的小型网站尤其是博客,可以使用自签名证书来构建安全网络,所谓自签名证书,就是自己扮演 CA 机构,自己给自己的服务器颁发证书。

  生成密钥、证书

  第一步,为服务器端和客户端准备公钥、私钥


  第二步,生成 CA 证书


  在执行第二步时会出现:


  注意,这里的 Organization Name (eg, company) [Internet Widgits Pty Ltd]: 后面生成客户端和服务器端证书的时候也需要填写,不要写成一样的!!!可以随意写如:My CA, My Server, My Client。

  然后 Common Name (e.g. server FQDN or YOUR name) []: 这一项,是最后可以访问的域名,我这里为了方便测试,写成 localhost,如果是为了给我的网站生成证书,需要写成 barretlee.com。

  第三步,生成服务器端证书和客户端证书


  此时,我们的 keys 文件夹下已经有如下内容了:


  看到上面两个 js 文件了么,我们来跑几个demo。

  HTTPS本地测试

  服务器代码:


  短短几行代码就构建了一个简单的 https 服务器,options 将私钥和证书带上。然后利用 curl 测试:


  当我们直接访问时,curl //localhost:8000 一堆提示,原因是没有经过 CA 认证,添加 -k 参数能够解决这个问题:


  这样的方式是不安全的,存在我们上面提到的中间人攻击问题。可以搞一个客户端带上 CA 证书试试:


  先打开服务器 node http-server.js,然后执行


  如果你的代码没有输出 hello world,说明证书生成的时候存在问题。也可以通过浏览器访问:

  提示错误:

此服务器无法证明它是localhost;您计算机的操作系统不信任其安全证书。出现此问题的原因可能是配置有误或您的连接被拦截了。

  原因是浏览器没有 CA 证书,只有 CA 证书,服务器才能够确定,这个用户就是真实的来自 localhost 的访问请求(比如不是代理过来的)。

  你可以点击 继续前往localhost(不安全) 这个链接,相当于执行 curl -k //localhost:8000。如果我们的证书不是自己颁发,而是去靠谱的机构去申请的,那就不会出现这样的问题,因为靠谱机构的证书会放到浏览器中,浏览器会帮我们做很多事情。初次尝试的同学可以去 startssl.com 申请一个免费的证书。

  Nginx 部署

  ssh 到你的服务器,对 Nginx 做如下配置:


  会发现,网页 URL 地址框左边已经多出了一个小绿锁。当然,部署好了之后可以去这个网站看看测评分数,如果分数是 A+,说明你的 HTTPS 的各项配置都还不错,速度也很快。

  小结

  好吧,我也是初次尝试,本地测试是 ok 的,由于买的阿里云服务器到期了也没续费,就没远程折腾,其实本地 Nginx + Nodejs,然后 Hosts 配置域名也是可以较好模拟的。文中很多地方描述的可能不是十分准确,提到的点也不够全面,如果有错误,还请斧正!

via:http://www.barretlee.com/blog/2015/10/05/how-to-build-a-https-server/

欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

HTTPS 证书生成原理和部署细节相关推荐

  1. 【教程】Linux下Https证书生成,与Nginx配置https

    Linux系统Https证书生成与Nginx配置https 证书生成 查看openssl 生成证书 Nginx配置https(默认443端口) 证书生成 查看openssl 1,我们在linux系统下 ...

  2. https证书服务器怎么完成部署?

    HTTPS是一种由http协议和SSL证书一同搭建的网络协议,也被称为https证书.部署了https证书服务器的网站也又更高的安全以及可信度.随着人们对于网络安全意识的提高,也使得https证书服务 ...

  3. https证书存在哪里?部署https证书的意义

    https证书存在哪里?这个是很多新手比较疑惑的一个问题.我们都知道https证书(即SSL证书)可以用来保护网站或微信小程序的安全,但不知道它其实是部署到服务器上的. https证书在安装之后,ht ...

  4. 免费https证书生成

    在线证书生成工具网站 freessl.cn 生成csr 证书管理工具 KeyManager

  5. Golang代码实现HTTPs(HTTPS证书生成和部署)

    在win7下试试: 1.实现一个最简单的HTTPS Web Server // gohttps/2-https/server.go package mainimport ("fmt" ...

  6. TLS/HTTPS 证书生成与验证

    https://www.cnblogs.com/kyrios/p/tls-and-certificates.html 最近在研究基于ssl的传输加密,涉及到了key和证书相关的话题,走了不少弯路,现在 ...

  7. Javaweb项目 http改成https 证书生成

    前提条件:已经下载并安装配置好Tomcat,访问http://localhost:8080的时候会出现tomcat的界面. 第一步:配置hosts文件 添加一行127.0.0.1 codecrazy. ...

  8. 本地https证书生成步骤

    步骤一:生成证书 keytool -genkey -v -alias tonguas -validity 3650  -keyalg RSA -keypass ucap123 -storepass u ...

  9. https 证书生成

    因等保问题需要使用https 协议进行web程序的访问 关于证书制作的工具下载地址为 :http://slproweb.com/products/Win32OpenSSL.html 此为windows ...

  10. HTTPS原理与证书生成

    原文链接: HTTPS原理与证书生成 HTTPS HTTPS与HTTP是什么关系呢?我们可以对比下HTTP与HTTPS的请求过程: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ...

最新文章

  1. gradle多项目 svn依赖
  2. 你或许还未听说过的一些ASP.NET 2.0要诀 [转]
  3. Python练习-迭代器-模拟cat|grep文件
  4. Unicode和Ascii转byte,Unicode占二个byte,Ascii占一个byte
  5. 使用开源ASR框架在Mono和.NET C#中进行语音识别
  6. 各种卷积类型Convolution
  7. cisco packet tracer 5.3.rar_思科cisco的asa防火墙排错命令packet-tracer
  8. python难学吗-python语言好学吗
  9. 设计模式分类及UML汇总
  10. 变频器LED显示灯闪烁_图文并茂,彻头彻尾认识变频器,适合初学者!
  11. zip和rar文件的contentType
  12. Radius 协议介绍
  13. db9针232接口波特率标准_RS232串口通信:接口定义、标准接法详细说明,一看就懂了...
  14. 关于 Unity 绑定手机 收不到验证码 的解决方案
  15. 【linux命令】cp复制命令
  16. Ubuntu 安装Chrome(DEB 出现问题使用)
  17. Java 多线程平行计算总结
  18. 【20210906】让实验室服务器运行本地python代码
  19. Dynamic Memory Networks DMN+
  20. ibm软件下载网页链接

热门文章

  1. 《Java技术》第六次作业
  2. ubuntu 14.04英文环境设置成中文
  3. 虚拟机自动安装linux操作系统(kickstart+pxe+dhcp+tftp)
  4. 年底购物狂欢,移动支付安全不容忽视
  5. 获取GridView控件总列数
  6. 如何通过Multitouch为Mac电脑添加更多手势控制?
  7. Garden Planner中使用3D视图的技巧
  8. 《软件调试》第二版正式发售,看雪给你早鸟价
  9. Oracle基础学习(四) 游标
  10. eclipse 配置多个tomcat