zoukankan      html  css  js  c++  java
  • openssl基础

    OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

    OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.

    openssl是https的基础,在TCP与应用http之间增加了一层数据加密(SSL/TLS)。

    SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTPFTPTELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

    HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

    SSL和TLS都包含两层协议:记录协议和握手协议。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

    1. 命令简介

    # 生成密钥
    $ openssl genrsa ...
    
    # 密钥相关操作,如:查看、去掉密码等
    $ openssl rsa ...
    
    # “签名请求证书”相关操作,如:生成、查看等
    $ openssl req ...
    
    # “证书”相关操作,如:生成、查看等
    $ openssl x509 ...
    
    # 计算哈希值
    $ openssl md5 ...
    $ openssl sha1 ...

    2. 常用场景

    创建密钥对

    # 创建私钥
    $ openssl genrsa -out rsa_1024_priv.pem 1024
    
    # 根据私钥得到公钥
    $ openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem

    自签名证书

    # 1.生成私钥
    $ openssl genrsa -des3 -out server.key 1024
    
    # 2.从秘钥中删除 Passphrase
    $ cp server.key server.key.org
    $ openssl rsa -in server.key.org -out server.key
    
    # 3.生成 CSR (Certificate Signing Request)
    $ openssl req -new -key server.key -out server.csr
    
    # 4.生成自签名证书
    $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

    自签名CA证书

    # 1.创建 CA 私钥
    $ openssl genrsa -des3 -out ca.key 4096
    
    # 2.生成 CA 的自签名证书
    $ openssl req -new -x509 -days 365 -key ca.key -out ca.crt
    
    # 3.生成需要颁发证书的私钥
    $ openssl genrsa -des3 -out server.key 4096
    
    # 4.生成要颁发证书的证书签名请求,证书签名请求当中的 Common Name 必须区别于 CA 的证书里面的 Common Name
    $ openssl req -new -key server.key -out server.csr
    
    # 5.用 2 创建的 CA 证书给 4 生成的 签名请求 进行签名
    $ openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

    计算哈希值

    # 计算文件 MD5 值
    $ openssl md5 myfile.txt
    
    # 计算文件 SHA1 值
    $ openssl sha1 myfile.txt
    
    # 计算文件 SHA256 值
    $ openssl sha1 -sha256 myfile.txt

    证书校验

    验证一个证书是否是某一个 CA 签发,文件格式必须为 PEM

    # 验证一个证书是否是某一个CA签发,文件格式必须为 PEM
    $ openssl verify -CAfile cafile.pem apache.crt

    可通过openssl提供的s_server和s_client验证证书。

    服务器端开启ssl测试服务:

    openssl s_server -msg -state -cert cert.pem -key key.pem -accept 18444

    客户端验证

    openssl s_client -msg -state -showcerts -cert client.cert -key client.key -connect localhost:18444

    验证服务器是否使用自签名CA颁发的HTTPS证书

    openssl s_client -connect test.com:28082 -CAfile ca.crt

    其他

    # 查看私钥信息
    $ openssl rsa -noout -text -in server.key
    
    # 查看签名请求信息
    $ openssl req -noout -text -in server.csr
    
    # 查看ca的私钥信息
    $ openssl rsa -noout -text -in ca.key
    
    # 查看证书信息
    $ openssl x509 -noout -text -in ca.crt
    
    # 查看一个证书吊销列表信息
    $ openssl crl -text -in   xx.crl
    
    # 查看一个证书的额外信息
    $ openssl x509 -purpose -in cacert.pem
    
    # 查看一个公钥的信息
    $ openssl rsa -noout -text -pubin -in apache.pub
    参考:

    1. openssl,https,ssl,tls百科

    2. www.openssl.org

    3. OpenSSL 的常用方法 简书

    4.  openssl 工具进行 SSL 故障分析

  • 相关阅读:
    leetcode 110. 平衡二叉树(判断是否为平衡二叉树)
    论文阅读:Elastic Scaling of Stateful Network Functions
    论文阅读:Stateless Network Functions: Breaking the Tight Coupling of State and Processing
    论文阅读:FlexGate: High-performance Heterogeneous Gateway in Data Centers
    论文阅读:Andromeda: Performance, Isolation, and Velocity at Scale in Cloud Network Virtualization (全文翻译用于资料整理和做PPT版本,之后会修改删除)
    论文阅读:Flow-level State Transition as a New Switch Primitive for SDN
    算法设计与分析 2.5 Joyvan的难题
    算法设计与分析 2.1 杰哥和序列 (求逆序数算法)
    PISCES: A Programmable, Protocol-Independent Software Switch
    算法设计与分析 1.3 杰哥和数字
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/6986592.html
Copyright © 2011-2022 走看看