术语
- PKI 公钥基础设施(Public Key Infrastructure)
- CSR 证书签署请求(certificate signing request)
- CA 证书颁发机构(certificate authority)
- DN 区分名称(Distinguised Name)
- CN 通用名称(Common Name)
- FQDN 完全合格域名(Fully Qualified Domain Name)
- 自签证书(self-signed certificate)
- CA证书
- 证书
- 私钥
私钥
openssl genrsa -des3 -out domain.key 2048
openssl rsa -check -in domain.key
openssl rsa -des3 -in domain.key -out encrypt.key
openssl rsa -in encrypt.key -out decrypt.key
CSR
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
openssl req -key domain.key -new -out domain.csr
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr
生成SSL证书
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt
openssl req -key domain.key -new -x509 -days 365 -out domain.crt
openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt
查看证书
openssl req -text -noout -verify -in domain.csr
openssl x509 -text -noout -in domain.crt
openssl verify -verbose -CAfile ca.crt domain.crt
openssl rsa -noout -modulus -in domain.key | openssl md5
openssl x509 -noout -modulus -in domain.crt | openssl md5
openssl req -noout -modulus -in domain.csr | openssl md5
openssl x509 -noout -dates -in domain.crt
证书格式转换
openssl x509 -in domain.crt -outform der -out domain.der
openssl x509 -inform der -in domain.der -out domain.crt
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt
自签证书
- 带CA的自签名证书:在这种情况下,用户不仅生成自己的证书,还创建了自己的CA,然后使用该CA签名其证书。这意味着用户有自己的证书颁发机构环境,可以用于签名多个证书。
- 不带CA的自签名证书:在这种情况下,用户只是为自己创建和签名一个证书,而没有创建CA。这个证书是单独存在的,不依赖于任何CA结构。
mkdir -p ca/{certs,keys}
openssl ecparam -genkey -name secp384r1 -out ca/keys/ca.key
openssl req -new -subj "/C=CN/ST=Anhui/L=Hefei/O=xxoo/OU=ca/CN=ca.xxoo.com" -key ca/keys/ca.key -out ca/certs/ca.csr
echo "subjectKeyIdentifier=hash" > ca/certs/ca_cert_extensions
echo "authorityKeyIdentifier=keyid:always,issuer" >> ca/certs/ca_cert_extensions
echo "basicConstraints=critical,CA:true" >> ca/certs/ca_cert_extensions
echo "subjectAltName=DNS.1:localhost,DNS.2:ca.xxoo.com,IP:127.0.0.1" >> ca/certs/ca_cert_extensions
openssl x509 -req -days 3650 -sha256 -extfile ca/certs/ca_cert_extensions -signkey ca/keys/ca.key -in ca/certs/ca.csr -out ca/certs/ca.crt
mkdir -p server/{certs,keys}
openssl ecparam -genkey -name secp384r1 -out server/keys/server.key
openssl req -new \
-subj "/C=CN/ST=Anhui/L=Hefei/O=xxoo/OU=server/CN=server.xxoo.com" \
-key server/keys/server.key -out server/certs/server.csr
echo "subjectKeyIdentifier = hash" > server/certs/server_cert_extensions
echo "authorityKeyIdentifier = keyid:always,issuer" >> server/certs/server_cert_extensions
echo "basicConstraints = CA:FALSE" >> server/certs/server_cert_extensions
echo "keyUsage = nonRepudiation, digitalSignature, keyEncipherment" >> server/certs/server_cert_extensions
echo "subjectAltName = DNS.1:localhost,DNS.2:server.xxoo.com,IP:127.0.0.1" >> server/certs/server_cert_extensions
openssl x509 -req -in server/certs/server.csr -out server/certs/server.crt -CA ca/certs/ca.crt -CAkey ca/keys/ca.key -CAcreateserial
openssl x509 -req -days 3650 -sha256 \
-extfile server/certs/server_cert_extensions \
-CA ca/certs/ca.crt -CAkey ca/keys/ca.key \
-in server/certs/server.csr -out server/certs/server.crt
参考