zoukankan      html  css  js  c++  java
  • SSL 数据加密原理简述

           最近调试mqtt协议,为了保证数据安全性和将来客户端的对云的兼容性选择了openssl作为安全加密中间层,而没有使用私有的加密方式。所以花了点时间学习了一下ssl 加密流程整理如下:

    因为正常正式使用场合是CA机构给对应的组织结构颁发CA证书的,这里是调试就自己使用opanssl 生成证书了,很多细节参考下面的参考博文。配置过程:

    #这一步本来是要证书签发机构,发行给网站组织。下面的方式是调试自己产生组织根证书

    openssl req -new -x509 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt


    #购买方使用买的证书(组织根证书)给自服务器产生秘钥
    opensslgenrsa -out server.key 2048
    #拿服务器秘钥计算服务器数字签名,将来这个CSR文件会发送到请求交互方,ssl_client必须验证 ssl_server
    openssl req -out server.csr -key server.key -new
    #拿数字签名和证书机构给的组织证书和组织秘钥产生服务器证书,至此服务器已经具备ssl条件
    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 36500


    #使用买的证书(组织证书)给客户端产生秘钥
    opensslgenrsa -out client.key 2048
    #拿秘钥计算数字签名,将来这个CSR文件会发送到请求交互方服务器(如果服务器需要验证client),ssl_server选择性验证 ssl_client
    openssl req -out client.csr -key client.key -new
    #拿数字签名和证书机构给的组织证书和组织秘钥产生客户端证书,至此client已经具备ssl条件
    openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500

    汇总成为一个脚本就是:

    openssl req -new -x509 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt
    openssl genrsa -out server.key 2048
    openssl req -out server.csr -key server.key -new
    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 36500
    #
    #
    openssl genrsa -out client.key 2048
    openssl req -out client.csr -key client.key -new
    openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500

    SSL 的身份认证过程:

    1、client 会拥有服务器的证书(非CA给的证书),在client请求服务器时服务器会返回签名文件。--------------明文
    2、通过本地的服务器的证书鉴别签名文件就能知道服务器是否可信,如果可信前面的解密服务器签名文件的过程得到了服务器的公钥。
    3、用服务器的公钥加密主密钥计算分散因子(Change Cipher Spec)后发送到服务器同时告知服务器协商后使用这个主密钥。--------------密文
    4、服务器用私钥解密这个分散因子,并返回client确认协商结果和可能还带有会话ID。--------------密文
    5、此时clien 就使用之前第三步告诉服务器的秘钥,如果成功解密服务器的回应则说明服务器是合法的。-------------到此客户端验证服务器身份和秘钥交换就结束了。

    如果服务器需要验证客户端则还需要如下过程(这个一般很少使用,因为需要服务器保存所有合法客户端的的证书):
    1.5、在服务器回发自己的数字签名后会同时请求client的数字签名,然后验证数字签名是否正确。其余过程不变。

    这里的1.5代表在上面步骤的第一步和第二步之间。

    参考博文写的非常好:https://www.cnblogs.com/bhlsheji/p/4586597.html 

  • 相关阅读:
    表的设计
    改善C#公共程序类库质量的10种方法和工具
    模块化编程
    Linux centOS本地DNS安装
    C#多线程解决界面卡死问题
    图解JOIN
    轻量级前端MVVM框架avalon
    免费的Visual Studio的插件
    Composite C1是一个.Net平台上开源专业的CMS开源项目
    NDepend 3.0已与Visual Studio集成
  • 原文地址:https://www.cnblogs.com/w-smile/p/14083330.html
Copyright © 2011-2022 走看看