苏打

使用openssl制作自签名证书

2019-12-12 · 3 min read
数字证书

openssl 命令可以手动制作证书,查看证书的信息,验证证书的签名。

ca证书制作

  • 使用 openssl 生成 ca.key 和 ca.crt,使用 openssl 创建 ca.key
openssl genrsa -out ca.key 2048
  • 使用 ca.key 生成ca证书ca.crt (-days 设置证书的有效期)
openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt

服务器证书制作

接着,我们创建服务器密钥(server.key)和证书请求文件,并使用上面生成的ca证书和ca密钥签名我们的服务器证书

  • 生成服务器密钥server.key
openssl genrsa -out server.key 2048
  • 创建配置文件 csr.conf,用于生成证书签名请求文件(Certificate Signing Request CSR),文件 "<>" 内的内容需要配置成实际的值
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C = <country>
ST = <state>
L = <city>
O = <organization>
OU = <organization unit>
CN = <MASTER_IP>

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = <dns1>
DNS.2 = <dns2>
IP.1 = <ip1>
IP.2 = <ip2>

[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=@alt_names
  • 使用上面的 csr.conf,生成服务器证书签名请求文件 server.csr
openssl req -new -key server.key -out server.csr -config csr.conf
  • 使用ca.crtca.keyserver.csr 签发服务器证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
    -CAcreateserial -out server.crt -days 10000 \
    -extensions v3_ext -extfile csr.conf
  • 查看证书信息
openssl x509  -noout -text -in ./server.crt

客户端证书制作

接下来,使用ca证书签发客户端证书

  • 生成 client.csrclient.key
openssl req -out client.csr -new -newkey rsa:4096 -nodes -keyout client.key \
-subj "/CN=development/O=system:masters"
  • 使用 client.csrca.keyca.crt 签发生成 client.crt
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

openssl 命令其他用法

  • 验证某一个证书是否是被某个ca证书签发的
openssl verify -CAfile /path/to/the-ca.crt /path/to/the-certificate.crt
  • 查看证书信息
openssl x509 -noout -text -in /path/to/serving-ca.crt