• OpenSSL生成CA证书


    基本概念

    证书类别

    • 根证书:生成服务端证书,客户端证书的基础。自签名。
    • 服务端证书:由根证书签发。配置在服务器上。
    • 客户端证书:由根证书签发。配置在浏览器、移动APP等客户端上。

    认证方式

    • 单向认证(Client鉴权Server)
      1、Client发送连接请求
      2、Server端将Server证书发送给Client
      3、Client使用CA根证书对Server证书进行鉴权
      请添加图片描述

    • 双向认证
      1、单向鉴权(Client鉴权Server)
      2、单向鉴权(Server鉴权Client)
      请添加图片描述

    证书文件

    • .key:私有的密钥
    • .csr:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
    • .crt:证书文件,certificate的缩写
    • .crl:证书吊销列表,Certificate Revocation List的缩写
    • .pem:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
    • .p12 或者 .pfx:用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目

    证书生成

    Windows上可使用Git自带的OpenSSL生成,打开Git Bash
    Linux本身自带OpenSSL

    根证书

    1、 生成CA私钥
    openssl genrsa -out ca.key 2048
    2、生成证书请求文件
    openssl req -new -key ca.key -out ca.csr
    需要输入证书信息,参考如下:
    Country Name (2 letter code) [AU]:CN
    State or Province Name (full name) [Some-State]:GD
    Locality Name (eg, city) []:GZ
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:HW
    Organizational Unit Name (eg, section) []:DEV
    Common Name (e.g. server FQDN or YOUR name) []:ROOT
    Email Address []:xxx@sina.com
    3、生成自签名CA根证书(有效期365天)
    openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

    服务端证书

    1、生成私钥,需要设定密码
    openssl genrsa -des3 -out server.key ***
    2、生成证书请求文件,需要输入上一步的密码
    openssl req -new -key server.key -out server.csr
    需要输入证书信息,最重要的一行是Common Name (e.g. server FQDN or YOUR name),您需要输入与服务器关联的域名,或者是您服务器的公共IP地址,参考如下:
    Country Name (2 letter code) [AU]:CN
    State or Province Name (full name) [Some-State]:GD
    Locality Name (eg, city) []:GZ
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:HW
    Organizational Unit Name (eg, section) []:DEV
    Common Name (e.g. server FQDN or YOUR name) []:10.10.8.8
    Email Address []:xxx@sina.com
    3、生成服务端证书
    openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
    这一步可能会提示错误:
    请添加图片描述

    解决办法,使用如下命令创建文件:
    mkdir -p demoCA/newcerts
    touch demoCA/index.txt
    touch demoCA/serial
    echo “01” > demoCA/serial

    客户端证书

    1、生成私钥,需要设定密码
    openssl genrsa -des3 -out client.key 1024
    2、生成证书请求文件,需要输入上一步的密码
    openssl req -new -key client.key -out client.csr
    注意输入的信息不要和服务端证书的一样,否则会报 ERROR:There is already a certificate for XXX 问题,比如我这里的Common Name不一样:
    Country Name (2 letter code) [AU]:CN
    State or Province Name (full name) [Some-State]:GD
    Locality Name (eg, city) []:GZ
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:HW
    Organizational Unit Name (eg, section) []:DEV
    Common Name (e.g. server FQDN or YOUR name) []:MY
    Email Address []:xxx@sina.com
    3、生成客户端证书
    openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

    证书导出

    有时需要用到pem或pfx格式的证书,可以用以下方式生成

    生成pem格式证书

    cat client.crt client.key > client.pem
    cat server.crt server.key > server.pem

    生成pfx(p12)格式证书

    openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12
    openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12

  • 相关阅读:
    使用SSE(Server-Sent Events)实现服务端给客户端发消息
    让锅碗瓢盆变成我们生活的快乐插曲
    (三)行为模式:10、策略模式(Strategy Pattern)(C++示例)
    对服务器上的容器进行端口映射:远程登录
    基于Jquery实现一个连连看小游戏,我赌你连普通级也过不去
    vue 中 父子组件值交互怎么使用 this.$emit
    支持CAN FD的Kvaser PCIEcan 4xCAN v2编码: 73-30130-01414-5如何应用?
    基于Keras搭建CNN、TextCNN文本分类模型
    决斗者优化算法:一种受决斗者如何在决斗中提高能力启发的算法(Matlab代码实现)
    Vue 纯 css 编写鱼骨图
  • 原文地址:https://blog.csdn.net/suwk1009/article/details/134163483