导言:
有时候,使用SSL协议是自己内部服务器使用的,这时可以不必去找第三方权威的CA机构做证书,可以做自签证书
使用openssl签发证书分为四个步骤:生成密钥对、生成证书请求、创建一个root CA、签发证书
一、生成密钥对
1、生成rsa密钥
(1)生成私钥
使用命令openssl genrsa:
openssl genrsa -out private.key 2048
如果想为这个key值加密,可使用命令:
openssl genrsa -aes128 -out private.key 2048
或者
openssl genrsa -aes256 -passout pass:111111 -out private.key 2048
(2)生成公钥
使用命令:
openssl rsa -in private.key -pubout -out public.key
如果私钥加密了,需要提供密码,或者直接在命令里提供密码:
openssl rsa -in private.key -passin pass:111111 -pubout -out public.key
2、生成ecdsa密钥
(1)生成私钥
使用命令openssl ecparam:
openssl ecparam -name secp384r1 -genkey -out private-ecc.key
(2)生成公钥
使用命令:
openssl pkey -in private-ecc.key -pubout -out public-ecc.key
二、生成证书请求
1、生成RSA证书请求
使用命令:
openssl req -new -key private.key -out private.csr
2、ECDSA证书请求:
使用命令:
openssl req -new -key private-ecc.key -out private-ecc.csr
三、创建一个root CA
1、创建openssl.cnf在使用default-ca时需要使用的SSL的工作目录(第一次必须要设置)
(1)输入命令:openssl version -a,查看openssl的配置文件
(2)找到 OPENSSLDIR: "/etc/pki/tls" 的配置文件openssl.cnf,根据配置文件下的[ CA_default ]节点默认值,创建对应文件夹和文件,该路径可做修改,一般改为/etc/pki/CA
然后创建以下文件夹和文件:
mkdir certs
mkdir newcerts
mkdir private
mkdir crl
touch index.txt
echo 01>serial
说明:
certs:存放已颁发的证书
newcerts:存放CA指令生成的新证书
private:存放私钥
crl:存放已吊销的整数
index.txt:penSSL定义的已签发证书的文本数据库文件,这个文件通常在初始化的时候是空的
serial:证书签发时使用的序列号参考文件,该文件的序列号是以16进制格式进行存放的,该文件必须提供并且包含一个有效的序列号
注意:执行 echo 01>serial 命令之后注意看下serial文件里面是否有 01 这个内容,如果没有,则需要手动使用 vi 命令写入
2、生成CA根证书(root ca证书)
方案一:生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt)(CA给自已颁发的证书)
方案二:生成CA私钥(.key)-->执行以下命令:
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
四、签发证书
签发证书使用openssl ca命令:
openssl ca -in private.csr -out private.crt -cert ca.crt -keyfile ca.key -days 3650
其他
(1)如果签发证书时,出现countryName、stateOrProvinceName、organizationName等不匹配的信息,可以对配置文件openssl.cnf进行修改
可以将三个参数的 match 改为 optional
(2)转换命令:
私钥转非加密:
openssl rsa -in private.key -passin pass:111111 -out private_noaes.key
私钥转加密:
openssl rsa -in private.key -aes256 -passout pass:111111 -out private_aes.key
私钥PEM转DER:(-inform和-outform 参数制定输入输出格式,由der转pem格式同理)
openssl rsa -in private.key -outform der-out private.der
查看私钥明细:(使用-pubin参数可查看公钥明细)
openssl rsa -in private.key -noout -text
查看证书细节:
openssl x509 -in private.crt -noout -text
转换证书编码格式:(-inform和-outform 参数制定输入输出格式,由pem转der格式同理)
openssl x509 -in private.cer -inform DER -outform PEM -out private.pem