openssl 生成根证书和自签名证书

695 阅读1分钟

常用后缀名

格式说明
.crt,.cer证书(Certificate)
.key密钥/私钥(Private Key)
.csr证书认证签名请求(Certificate signing request)
.pembase64编码文本储存格式,可以单独放证书或密钥,也可以同时放两个;base64编码就是两条-------之间的那些莫名其妙的字符

CA根证书生成

脚本如下,需要修改部分参数,注意COMMON_NAME要写服务器所在的域名或者IP地址

  • vim ca-generate.sh
#!/bin/bash

COUNTRY="CN"
STATE="ZJ"
CITY="NB"
ORGANIZATION="nise-ca"
ORGANIZATIONAL_UNIT="nise-ca"
COMMON_NAME="nise-ca"
EMAIL="huzhihui_c@qq.com"

echo "generate ca.key"
openssl genrsa -out ca.key 2048

echo "generate ca.crt"

SUBJECT="/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"

openssl req -x509 -new -nodes -key ca.key -sha256 -days 2000 -out ca.crt -subj "${SUBJECT}"

生成自签署证书

  • vim domain-generate.sh
#!/bin/bash

DOMAIN=$1
if [[ ! -n $DOMAIN ]] ; then
    echo -e "---请输入生成证书的域名或服务器IP---"
    read -r DOMAIN
fi

COUNTRY="CN"
STATE="ZJ"
CITY="NB"
ORGANIZATION="nise"
ORGANIZATIONAL_UNIT="nise"
COMMON_NAME="${DOMAIN}"
EMAIL="huzhihui_c@qq.com"

SUBJECT="/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"

echo "generate domain ssl key"
openssl genrsa -out "${COMMON_NAME}.key" 2048
openssl req -subj "$SUBJECT" -sha256 -new -key "${COMMON_NAME}.key" -out ${COMMON_NAME}.csr

echo """
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:false
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = ${COMMON_NAME}
DNS.2 = *.${COMMON_NAME}
""" > extfile.ext
echo "generate domain ssl crt"
openssl x509 -req -in ${COMMON_NAME}.csr -CA "ca.crt" -CAkey "ca.key" -CAcreateserial -out ${COMMON_NAME}.crt -days 2000 -sha256 -extfile extfile.ext

rm -rf ${COMMON_NAME}.csr

运行

# chmod -R 755 ca-generate.sh domain-generate.sh
# ./ca-generate.sh
# ./domain-generate.sh
[root@localhost ssl]# ls
ca.crt  ca-generate.sh  ca.key  ca.srl  tls-generate.sh  www.baidu.cn.crt  www.baidu.cn.key  www.baidu.com.crt  www.baidu.com.key

最后配置到服务端即可

  • 注意:如果想本地证书被信任,需要把ca.crt添加到受信任的根证书颁发机构,这样双方进行通信就可以了