CA和证书
创建CA
查看openssl.cnf配置文件:位于/usr/lib/ssl/openssl.cnf.ca相关的配置在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 # 下一个要颁发的证书序列号(16进制数) crlnumber= $dir/crlnumber # 下一个要吊销证书的序列号 crl = $dir/crl.pem # 证书吊销列表 private_key = $dir/private/cakey.pem # 存放私钥 RANDFILE= $dir/private/.rand # 生成随机数 x509_extensions = usr_cert # 不关键 policy= policy_match # 策略匹配
创建di对应的目录或更改dir位置,例如
dir = /etc/pki/CA
dir目录下创建certs、crl、newcerts、private目录,index.txt,serial文件
sudo mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private}
sudo touch /etc/pki/CA/{serial,index.txt}
cd /etc/pki/CA/
- 指明指定第一个颁发证书的序列号:
echo 01 >> serial # 需要root用户才能执行'su root',或"sudo sh -c 'echo 01 >>serial'"也可手动写入srial文件
生成自签证书(在root用户下进行):
- 生成密钥:
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) # umask减小权限,-out后选项由private_key定义,密钥保存目录.
- 生成自签证书:
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
命令中用到的选项解释:
+ -new:表示生成一个新证书签署请求 + -x509:专用于CA生成自签证书,如果不是自签证书则不需要此项 + -key:生成请求时用到的私钥文件 + -out:证书的保存路径 + -days:证书的有效期限,单位是day(天),默认是365天
需要填写的信息:
Country Name (2 letter code) [AU]:CN # 国家 State or Province Name (full name) [Some-State]:BeiJing # 省 Locality Name (eg, city) []:beijing # 城市 Organization Name (eg, company) [Internet Widgits Pty Ltd]:wy # 公司 Organizational Unit Name (eg, section) []: # 可选, Common Name (e.g. server FQDN or YOUR name) []:wyao.club # 域名 Email Address []:1446745072@qq.com #邮箱
查看证书内容:
openssl x509 -in cacert.pem -noout -text
,windows里看,改成cer或crt后缀
生成证书
- 在需要证书的主机上生成证书请求:
(umask 077;openssl genrsa -out text.key 4096) # 生成私钥
openssl req -new -key text.key -out text.csr -days 365 # 根据私钥生成证书请求
- 将证书请求发送给CA服务器,在CA服务器上签名:
可以用ssh命令scp将文件复制到远程主机
openssl ca -in text.csr -out /etc/pki/CA/certs/text.crt -days 365 # 签名,国家,省,组织等选项要与CA自签证书一致
查看证书信息:
openssl x509 -in /etc/pki/CA/certs/text.crt -noout -serial -subject
将签好的证书发给请求签证的客户端
吊销证书
在客户机上获取要吊销证书的 serial 和 subject 信息
根据客户机提交的 serial 和 subject 信息,对比其余本机数据库 index.txt 中存储的是否一致
执行吊销操作:
openssl ca -revoke /etc/pki/CA/newcerts/01.pem
生成吊销证书的吊销编号(第一次吊销证书时执行):’echo 01 > /etc/pki/CA/crlnumber’
更新证书吊销列表:
openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl
查看 crl 文件命令:openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text
配置文件生成证书请求
- 编写配置文件,示例www.cnf:
[ req ]
prompt = no
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
countryName = us
stateOrProvinceName = New York
localityName = New York
0.organizationName = Example from Apress Media LLC
organizationalUnitName = Foundations of Python Network Programming 3rd Ed
commonName = www.example.com
emailAddress = root@example.com
[ ssl_client ]
basicConstraints = CA:FALSE
nsCertType = client
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
生成密钥:
openssl genrsa -out www.key 4096
生成证书请求:
openssl req -new -key www.key -config www.cnf -out www.csr
通过CA获取签名证书
将证书和私钥结合起来,保存在单个文件中:
cat www.crt www.key > www.pem
参考
参考1:openssl用法详解https://www.cnblogs.com/yangxiaolan/p/6256838.html
参考2:ubuntu CA安装证书https://blog.csdn.net/ww7109/article/details/80141858
参考3:python网络编程