OpenSSL 自签发证书

Posted by API Caller on March 22, 2019

OpenSSL 自签发证书, 供双向认证用, 繁琐, 整了一遍简单记录.

本文环境

  • Windows 10 x64
  • OpenSSL 1.1.0f (自己编译, 自然也有编译好的)

具体流程

制作根证书

  • 生成CA私钥: ca.key (这个是信任的起点,根证书,所有其他的证书都要经过 CA 的私钥签名)

    1
    
      openssl genrsa -des3 -out ca.key 2048
    
  • 生成 CA 根证书的公钥: ca.crt

    1
    
      openssl req -new -x509 -days 3650 -key ca.key -out ca.crt 
    

制作服务端证书

  • 生成证服务端书私钥: server.pem

    1
    
      openssl genrsa -des3 -out server.pem 1024
    
  • 生成无密码的服务端私钥: server.key

    1
    
      openssl rsa -in server.pem -out server.key
    
  • 生成服务端签发请求: server.csr

    1
    
      openssl req -new -key server.pem -out server.csr
    
  • 最后用 CA 证书给服务端证书进行签名

    1
    
      openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
    
  • 把 ca.crt 的内容追加到 server.crt 后面,因为有些浏览似乎不支持

    1
    
      cat ca.crt >> server.crt
    

制作客户端证书(跟制作服务端证书步骤一样)

  • 生成客户端证书私钥

    1
    
      openssl genrsa -des3 -out client.key 2048
    
  • 生成客户端证书签发请求

    1
    
      openssl req -new -key client.key -out client-req.csr
    
  • 用 CA 证书给客户端证书进行签名

    1
    
      openssl x509 -req -sha256 -in client-req.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out client.crt
    
  • 客户端证书 CRT 转换为 PKCS#12 格式(全称应该叫做 Personal Information Exchange,通常以 p12 作为后缀)

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

p12 生成无密码的 client.pem 和 key.pem

1
openssl pkcs12 -nokeys -in client.p12 -out client.pem 
1
openssl pkcs12 -nocerts -in client.p12 -out key.pem -nodes