简介
证书颁发机构(CA)是签署数字证书的实体。网站需要让客户知道连接的安全的,他们需要向国际信任的CA支付签署其域名证书的费用。
创建根证书
CA处理加密的私钥和公共证书。一般CA不直接签署服务器或者客户端的证书。根CA仅用于创建一个或者多个中间CA,根CA信任中间CA,由中间CA代表其签署证书。这样保证跟密钥的脱机和未使用,因为根密钥的任何损害都是灾难性的。
创建根证书的步骤如下所示
-
准备目录
mkdir /root/ca cd /root/ca mkdir certs crl newcerts private chmod 700 private touch index.txt echo 1000 > serial
-
准备配置文件 /root/ca/openssl.cnf
-
创建根key
cd /root/ca ## 其中-aes256的方式进行加密,可以省略不添加密码 openssl genrsa -aes256 -out private/ca.key.pem 4096 chmod 400 private/ca.key.pem
-
创建根证书
# 使用req的命令必须使用-config指定openssl.cnf,如果没有指定会使用默认路径 # 根证书一般的有效期设置的比较长,根证书失效后所有其签署的证书都不能正常工作 cd /root/ca openssl req -config openssl.cnf \ -key private/ca.key.pem \ -new -x509 -days 7300 -sha256 -extensions v3_ca \ -out certs/ca.cert.pem chmod 444 certs/ca.cert.pem
-
核实根证书
openssl x509 -noout -text -in certs/ca.cert.pem # Signature Algorithm 签名算法 # dates证书的有效期 # Public-Key的bit长度 # Issuer证书的签署机构 # Subject证书的持有机构 # 根证书都是签署机构和证书持有者相同的,自签名的
创建中间证书
中间证书是根证书签署的证书,根证书信任中间证书,进而形成信任链。使用中间证书主要是为了安全,
尽量保证根证书是离线的,尽可能少的使用。如果中间证书不在安全,可以通过根证书进行撤销中间证书,重新签署一个新的中间证书。
-
准备目录,基本和根证书的相同
mkdir /root/ca/intermediate cd /root/ca/intermediate mkdir certs crl csr newcerts private chmod 700 private touch index.txt echo 1000 > serial # crlnumber用来跟踪证书撤销 echo 1000 > /root/ca/intermediate/crlnumber
-
拷贝配置文件到中间证书目录下/root/ca/intermediate/openssl.cnf
# 和根证书的配置不同点如下所示 [ CA_default ] dir = /root/ca/intermediate private_key = $dir/private/intermediate.key.pem certificate = $dir/certs/intermediate.cert.pem crl = $dir/crl/intermediate.crl.pem policy = policy_loose
-
创建中间key
cd /root/ca openssl genrsa -aes256 \ -out intermediate/private/intermediate.key.pem 4096 chmod 400 intermediate/private/intermediate.key.pem
-
创建中间证书签名请求
cd /root/ca openssl req -config intermediate/openssl.cnf -new -sha256 \ -key intermediate/private/intermediate.key.pem \ -out intermediate/csr/intermediate.csr.pem
-
根证书给中间证书进行签名,该证书一般签发的有效期要比根证书的有效期要短,一般是10年
cd /root/ca openssl ca -config openssl.cnf -extensions v3_intermediate_ca \ -days 3650 -notext -md sha256 \ -in intermediate/csr/intermediate.csr.pem \ -out intermediate/certs/intermediate.cert.pem chmod 444 intermediate/certs/intermediate.cert.pem # index.txt是Openssl的CA命令存储签名的数据库,不允许手动删除或者修改。
-
核实中间证书
openssl verify -CAfile certs/ca.cert.pem \ intermediate/certs/intermediate.cert.pem
-
创建证书链文件
cat intermediate/certs/intermediate.cert.pem \ certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem chmod 444 intermediate/certs/ca-chain.cert.pem
创建服务端和客户端的签名
通过中间证书来签署服务端和客户端的证书。
-
创建服务端的key
cd /root/ca openssl genrsa -aes256 \ -out intermediate/private/www.example.com.key.pem 2048 chmod 400 intermediate/private/www.example.com.key.pem
-
创建签名请求
cd /root/ca openssl req -config intermediate/openssl.cnf \ -key intermediate/private/www.example.com.key.pem \ -new -sha256 -out intermediate/csr/www.example.com.csr.pem
-
中间CA进行签名
# cd /root/ca openssl ca -config intermediate/openssl.cnf \ -extensions server_cert -days 375 -notext -md sha256 \ -in intermediate/csr/www.example.com.csr.pem \ -out intermediate/certs/www.example.com.cert.pem chmod 444 intermediate/certs/www.example.com.cert.pem
-
核实签名
openssl x509 -noout -text \ -in intermediate/certs/www.example.com.cert.pem # 使用之前的CA链检验证书是否合法 openssl verify -CAfile intermediate/certs/ca-chain.cert.pem \ intermediate/certs/www.example.com.cert.pem
常见的命令
-
查看版本号详情
openssl version -a
-
查看默认的配置路径
openssl version -d
-
帮助命令,帮助本身是不合法的命令
openssl help # openssl:Error: 'help' is an invalid command 命令会出错,但是依然能够看到有哪些命令,后面可以通过man s_client的形式来查看详情
-
openssl通过client进行模拟tls连接
openssl s_client -showcerts -connect localhost:8883 -CAfile ca-chain.pem
-
建立Tls的Service
openssl s_server -accept 8443 -cert cert.pem -key key.pem -CAfile certs/ca-chain.cert.pem
-
同时查看多个证书详情的话
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout