学习CA证书认证网络,记录个流水账以便日后可用
我文中使用的域名是内部的,你也可以自己搭建一个网络,使用一样的域名.
注意:三端在生成证书的时候填写的国家,省,市,组织名 这些信息要一致!除了web服务端填写的域名
终端表
终端名称 | IP地址 | 简介 |
---|---|---|
根CA | 10.35.176.1 | 一个CA证书网络的中心,所有证书的最终信用保证 |
子CA | 10.35.176.8 | 该终端需要向根CA获取一个子CA证书,该终端的主要职责是签发SSL服务端证书给数据服务端.不一定要有这个终端. |
web服务端 | 10.35.176.6(域名:linzopi.vpn) | 向子CA领取一个web服务端证书.用于加密数据发给最终用户终端. |
最终用户终端 | 10.35.176.5 | 数据的最终接收者,该设备向CA查询证书是否为真,以确保数据是由真正的数据服务端发出. |
根CA配置
创建目录结构
mkdir /etc/pki mkdir /etc/pki/tls mkdir /etc/pki/CA mkdir /etc/pki/CA/private mkdir /etc/pki/CA/newcerts touch /etc/pki/CA/index.txt #生成证书索引数据库文件 echo 01 > /etc/pki/CA/serial #指定第一个颁发证书的序列号
写配置文件
vim /usr/lib/ssl/openssl.cnf
其中有个CA_default段落,将内容改为如下:
[ CA_default ] dir = /etc/pki/CA # CA的默认工作目录 certs = $dir/certs # 认证证书的目录 crl_dir = $dir/crl # 证书吊销列表的路径 database = $dir/index.txt # 数据库的索引文件 new_certs_dir = $dir/newcerts # 新颁发证书的默认路径 certificate = $dir/cacert.pem # 此服务认证证书,如果此服务器为根CA那么这里为自颁发证书 serial = $dir/serial # 下一个证书的证书编号 crlnumber = $dir/crlnumber # 下一个吊销的证书编号 crl = $dir/crl.pem # The current CRL private_key = $dir/private/cakey.pem# CA的私钥 RANDFILE = $dir/private/.rand # 随机数文件 x509_extensions = usr_cert # The extentions to add to the cert name_opt = ca_default # 命名方式,以ca_default定义为准 cert_opt = ca_default # 证书参数,以ca_default定义为准 default_days = 365 # 证书默认有效期 default_crl_days= 30 # CRl的有效期 default_md = sha256 # 加密算法 preserve = no # keep passed DN ordering policy = policy_match #policy_match策略生效
某处还有个usr_cert段落,改为如下,该节点允许CA签出来的证书作为子CA:
[ usr_cert ] # These extensions are added when 'ca' signs a request. # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:true,pathlen:3
生成CA根秘钥
# 这个根秘钥,需要保存在本机器,不可泄露. # 参数分别是输出的路径(必须和上面配置文件一样)和秘钥位数 openssl genrsa -out /etc/pki/CA/private/cakey.pem 8192
生成CA根证书
根CA自签名证书,根CA是最顶级的认证机构,没有人能够认证他,所以只能自己认证自己生成自签名证书。
该证书需要安装到最终用户终端,这样最终用户对该CA根以及相关子证书才能信任
此处会让你输入国家省市,需要匹配配置文件
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem # -new: 生成新证书签署请求 # -x509: 专用于CA生成自签证书 # -key: 生成请求时用到的私钥文件 # -days n:证书的有效期限 # -out /PATH/TO/SOMECERTFILE: 证书的保存路径
如果生成证书成功,可以用这个命令查看证书信息:
openssl x509 -in /etc/pki/CA/cacert.pem -noout -text
导出为Windows格式
linux下的证书格式和windows格式是不同的,需要进行转换,转换完成后,把crt文件,用你能想到的方式复制到windows设备双击即可安装.
具体区别,请看这
Win10似乎也支持PEM格式的证书,改个后缀即可安装.
Windows安装时应安装到"受信任的根证书颁发机构"
openssl x509 -outform der -in /etc/pki/CA/cacert.pem -out /etc/pki/CA/cacert.crt
子CA配置
创建目录结构
mkdir /etc/pki mkdir /etc/pki/tls mkdir /etc/pki/tls/private mkdir /etc/pki/CA mkdir /etc/pki/CA/private mkdir /etc/pki/CA/newcerts touch /etc/pki/CA/index.txt #生成证书索引数据库文件 echo 01 > /etc/pki/CA/serial #指定第一个颁发证书的序列号 echo "unique_subject = no">/etc/pki/CA/index.txt.attr #允许签发多个名称属性一样的证书
写配置文件
vim /usr/lib/ssl/openssl.cnf
其中有个CA_default段落,将内容改为如下:
[ CA_default ] dir = /etc/pki/CA # CA的默认工作目录 certs = $dir/certs # 认证证书的目录 crl_dir = $dir/crl # 证书吊销列表的路径 database = $dir/index.txt # 数据库的索引文件 new_certs_dir = $dir/newcerts # 新颁发证书的默认路径 certificate = $dir/cacert.pem # 此服务认证证书,如果此服务器为根CA那么这里为自颁发证书 serial = $dir/serial # 下一个证书的证书编号 crlnumber = $dir/crlnumber # 下一个吊销的证书编号 crl = $dir/crl.pem # The current CRL private_key = $dir/private/cakey.pem# CA的私钥 RANDFILE = $dir/private/.rand # 随机数文件 x509_extensions = usr_cert # The extentions to add to the cert name_opt = ca_default # 命名方式,以ca_default定义为准 cert_opt = ca_default # 证书参数,以ca_default定义为准 default_days = 365 # 证书默认有效期 default_crl_days= 30 # CRl的有效期 default_md = sha256 # 加密算法 preserve = no # keep passed DN ordering policy = policy_match #policy_match策略生效
Chrome浏览器要求证书中必须包含“Subject Alternative Names”这一参数。如果没有这个参数,chrome不认.
找到[ req ]段落在底下添加req_extentions = v3_req
找到[ v3_req ]段落,添加subjectAltName = @alt_names
添加一个段落
[ alt_names ]
DNS.1 = linzopi.vpn(web服务端域名,需要根据申请者的域名修改)
效果:
生成秘钥和证书请求文件
# 生成秘钥 openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048 # 生成证书请求文件 openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/subca1.csr
获取子CA证书
上面的命令执行完成后把subca1.csr发到根CA的/etc/pki/CA/newcerts目录里面
下面这个命令在根CA终端执行
openssl ca -in /etc/pki/CA/newcerts/subca1.csr -cert /etc/pki/CA/cacert.pem -keyfile /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/newcerts/cacert.pem -days 3650
如果没问题newcerts目录里可以找到一个新的cacert.pem文件,传到子CA的/etc/pki/CA/里面.并且安装到Windows的"中间证书颁发机构"
WEB服务端
生成key和证书请求
注意Common Name这里,要填写域名,否则浏览器会认为不安全!
mkdir ~/cert/ vim /usr/lib/ssl/openssl.cnf openssl genrsa -out ~/cert/linzopi.key 2048 openssl req -new -key ~/cert/linzopi.key -out ~/cert/linzopi.csr
csr传到子CA的/etc/pki/CA/newcerts目录里面
子CA:
openssl ca -in /etc/pki/CA/newcerts/linzopi.csr -out /etc/pki/CA/newcerts/linzopi.crt -days 365 -extensions v3_req
得到linzopi.csr文件(虽然生成的时候文件后缀名设为crt实际上是pem格式,如果需要der格式,加-outform der参数),传回web服务端~/cert/目录.
来源:https://www.cnblogs.com/DragonStart/p/12235278.html