利用Openssl搭建私有CA
- 目标是为了向内网用户颁发证书,方便内部用户得到彼此的公钥
- 搭CA服务器实际表现为准备好相关的文件
第一步:创建CA对应的文件夹
- CentOS 7中已存在CA内容的对应文件夹
tree /etc/pki/CA
/etc/pki/CA
├── certs
├── crl
├── newcerts
└── private
4 directories, 0 files
- CentOS 8中没有这些文件夹内,需要按要求创建出对应的文件夹
mkdir -pv /etc/pki/CA/{
certs,crl,newcerts,private}
第二步:创建CA所需文件
-
index.txt 颁发证书的数据库文件,
需要toch创建出来,不需要维护内容,
给用户颁发证书文件时候,会自动往里写东西 -
serial 给证书的编号,
只需要创建起来,写个数字进去,
有格式要求,数字会不断地递增,
生成下一个证书时会自动更新该文件中的数字这两个文件需要在搭建ca前
#生成证书索引数据库文件 touch /etc/pki/CA/index.txt #指定第一个颁发证书的序列号 echo 01 > /etc/pki/CA/serial
第三步:生成CA服务器私钥
- openssl genrsa 用这个命令生成私钥
- 进入到CA目录
cd /etc/pki/CA/
- 生成CA服务器私钥
文件名和路径都是固定的
命令也是固定的
(umask 066; openssl genrsa -out private/cakey.pem 2048)
第四步:生成CA服务器自签名证书
- CA服务器自己也需要证书,也就是根证书
- 需要自己给自己先颁发一个自签名证书
- 整个网络中的第一个CA,自己给自己签发自签名证书
执行命令开始创建CA自签名证书
openssl req -new -x509 -key \
/etc/pki/CA/private/cakey.pem \
-days 3650 -out /etc/pki/CA/cacert.pem
-
参数说明
-new:生成新证书签署请求 -x509:专用于CA生成自签证书 -key:生成请求时用到的私钥文件 -days n:证书的有效期限 -out /PATH/TO/SOMECERTFILE: 证书的保存路径
进入交互式模式填写CA证书相关信息
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:Sun.com
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:it.Sun.com
Email Address []:it@Sun.com
至此,私有CA服务器搭建完成了
证书申请及签署步骤:
- 生成证书申请请求
– 生成私钥
– 从私钥生成csr申请文件 - RA核验
– 转发给CA的代理审核请求 - CA签署
– 接受请求,签发证书 - 获取证书
– 客户端得到带有公钥的证书
客户证书申请
- 证书申请可以在客户端生成私钥和证书申请文件,
- 也可以在CA服务器上直接完成
CA服务器搭建好以后
- 创建或指定存放客户私钥的文件夹
mkdir /data/sun1
- 生成用户私钥
(umask 066;openssl genrsa -out /data/sun1/sun1.key 2048)
[00:11:00 root@C8[ sun1]#(umask 066;openssl genrsa -out /data/sun1/sun1.key 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
..........................