创建私有CA和证书申请

一、OpenSSL:CA默认配置信息

openssl 配置文件:/etc/pki/tls/openssl.cnf

openssl.cnf部分配置信息和CA相关的配置文件,可修改
####################################################################
[ ca ]
default_ca = CA_default # The default ca section 指定默认CA是CA_default

####################################################################

[ CA_default ]

dir             = /etc/pki/CA           # Where everything is kept             CA的公共目录 定义一个dir变量
certs           = \$dir/certs            # Where the issued certs are kept   
crl_dir         = \$dir/crl              # Where the issued crl are kept        证书吊销列表
database        = $dir/index.txt        # database index file.                证书数据库,存放证书的状态,编号等,需要手工创建,创建的是一个空文件,数据自动生成
\#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
new_certs_dir   = \$dir/newcerts         # default place for new certs.          颁发的证书自动生成
certificate     = \$dir/cacert.pem       # The CA certificate                    CA自己的证书,根CA是自己给自己颁发的证书,子CA是由上级CA颁发的证书
serial          = \$dir/serial           # The current serial number             当前序列号,是一个16进制,数值要放在此文件夹中,但是表示的是颁发的下一个证书的编号
crlnumber       = \$dir/crlnumber        # the current crl number                下一个证书的吊销编号
                                        # must be commented out to leave a V1 CRL  
crl             = \$dir/crl.pem          # The current CRL                 
private_key     = \$dir/private/cakey.pem# The private key                         证书的私钥
RANDFILE        = \$dir/private/.rand    # private random number file               随机数

x509_extensions = usr_cert              # The extentions to add to the cert      x509

\# Comment out the following two lines for the "traditional"
\# (and highly broken) format.
name_opt        = ca_default            # Subject Name options                   命令方式是由ca_default决定的
cert_opt        = ca_default            # Certificate field options              

\# Extension copying option: use with caution.
\# copy_extensions = copy

\# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
\# so this is commented out by default to leave a V1 CRL.
\# crlnumber must also be commented out to leave a V1 CRL.
\# crl_extensions        = crl_ext

default_days    = 365                   # how long to certify for               证书的有效期默认是365天,可以修改
default_crl_days= 30                    # how long before next CRL              crl 默认有效期是30天 
default_md      = sha256                # use SHA-256 by default                
preserve        = no                    # keep passed DN ordering

\# A few difference way of specifying how similar the request should look
\# For type CA, the listed attributes must be the same, and the optional
\# and supplied fields are just that :-)
policy          = policy_match          策略是policy_match

\# For the CA policy
[ policy_match ]                        纪录的是CA搭建的时候的以及客户端申请CA证书的时候信息匹配程度
countryName             = match         国家                                 
stateOrProvinceName     = match         美国的州  我们国家应该是省
organizationName        = match         公司
organizationalUnitName  = optional      公司部门
commonName              = supplied      通用名,主机名,给网站域名用的
emailAddress            = optional      邮件地址

注意:  match 必须匹配   optional 可有可无,可以不一样   supplied 必须添加,可以不一样

\# For the 'anything' policy
\# At this point in time, you must list all acceptable 'object'
\# types.
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

####################################################################

二、OpenSSL:创建私有证书签发机构CA步骤

1.生成私钥
cd /etc/pki/CA/
umask 066;openssl genrsa -out private/cakey.pem -des3 2048)
umask #指定文件的权限
genrsa #私钥加密的算法
-out private/cakey.pem #生成的私钥存放路径,这里必须是这个路径,如果要改成其他路径,需要修改配置/etc/pki/CA 
-des3 #加密算法,后面跟的位数范围是 1024 到 4096  我们这里选择2048 

这里写图片描述

如上图,输入口令加密私钥。

这里写图片描述

如上图查看生成的私钥文件catkey.pem

2. 利用私钥生成自签名证书
cd /etc/pki/CA

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300

-new:#生成新证书签署请求;

-x509:#生成自签格式证书,专用于创建私有CA时;

-key:#生成请求时用到的私有密钥文件路径;

-out:#生成的请求文件路径;如果自签操作将直接生成签署过的证书;

-days:#证书的有效时长,单位是day;

这里写图片描述

填写证书基本信息

Country Name (2 letter code) [XX]: # 两个字符表示的国家代码,CN为中国

State or Province Name (full name) []: # 省或洲的完整名称

Locality Name (eg, city) [Default City]: # 所在位置的名称(默认为城市)
Organization Name (eg, company) [Default Company Ltd]: # 组织机构名称(默认为公司)

Organizational Unit Name (eg, section) []: # 组织机构单元名称(eg.部门)

Common Name (eg, your name or your server’s hostname) []: # 持有者名或者所在服务器主机名(即域名)

Email Address []: # 管理员邮件地址,可以省略

这里写图片描述

查看自签名证书

这里写图片描述

在xshell中执行命令
sz cacert.pem
把数字证书cacert.pem 导入到Windows系统中可以看一下效果

这里写图片描述

如上图,因为我们创建的自签名证书,所以【颁发者】和【颁发给】后面跟的都是同一主机名ca.zhangym.com。时间也是我们设置的7300天,大约20年。还可以查看证书路径,详细信息等等,这里不再截图展示了。
三、OpenSSL:子CA证书申请和根CA颁发 证书给子CA

1. 子CA生成证书请求

子CA生成私钥

(umask 066;openssl genrsa -out private/cakey.pem -des3 2048)
openssl  req  -new  -key  private/cakey.key  -out  subca.csr

这里写图片描述

证书信息填写

这里写图片描述

将证书请求文件传输给根CA

openssl  ca  -in  subca.csr  -out  certs/subca.crt #可以加上期限(-days xxxx),这里我选择配置文件默认期限
2. 根CA签署证书,并将证书颁发给请求者
cd /etc/pki/CA       #注意路径,进入CA目录下操作
touch index.txt      #证书数据库,存放证书的状态,编号等
openssl ca -in subca.csr -out certs/subca.crt 

这里写图片描述

可以查看到/etc/pki/CA/certs/目录下生成的颁发的证书subca.crt文件

这里写图片描述

scp certs/subca.crt 172.18.24.6:/etc/pki/CA/cacert.pem

注意:这里要把subca.crt文件的后缀名改成 .pem,配置文件规定,CA要有cacert.pem文件才可以颁发证书。

自此根CA给子CA颁发的证书cacert.pem就生成了,子CA就可以在相应的服务中使用证书了。

四、OpenSSL:客户端申请证书和子CA颁发证书

1. 客户端生成私钥

进入到/etc/pki/tls目录下,这里把客户端生成的私钥存放在tls目录下的private目录中,可以自行选择存放路径,这里没有严格要求路径

cd /etc/pki/tls
(umask 066; openssl genrsa -out private/app.key -des3 2048

这里写图片描述

如上图,openssl命令参数跟一步骤的生成私钥一样,这里不做过多的阐述。

2. 在需要使用证书的主机生成证书请求

生成私钥

openssl  req  -new  -key  private/app.key  -out  app.csr

#这里跟步骤一生成自签名文件一样,不过少了-x509,加上-x509表示自签名,我们这里是申请证书

这里写图片描述

生成app.csr证书请求文件

openssl  req  -new  -key  private/app.key  -out  app.csr

这里写图片描述

填写申请证书信息,如下图

这里写图片描述

将证书请求文件传输给子CA

2. 子CA签署证书,并将证书颁发给请求者
cd /etc/pki/CA       #注意路径,进入CA目录下操作
touch index.txt      #证书数据库,存放证书的状态,编号等
echo 00 > serial     #数值要放在此文件夹中,但是表示的是颁发的下一个证书的编号,00表示下一个数字证书的编号是00,可以自己自己指定一个值

颁发证书

openssl  ca  -in  app.csr  -out  certs/app.crt -days 100  #这里期限设置为100天

**注意:默认证书请求和子CA上的,国家、省、公司名称三项必须一致,如果填写不一致,可能会报错,需要从会客户端从新生成app.csr文件 。如果我们修改了配置,把policy-math改成policy-anything,这个时候所有的信息都可以不一样,其实那些信息一样,那些信息不一样,都是可以通过修改配置文件的策略来自定义的。我们这里选择默认,感兴趣的同学可以试试。
**

这里写图片描述

正确操作后,会有两个选择,都选择Y即可。

查看index文件和serial文件

这里写图片描述

把颁发的证书发送给客户端

这里写图片描述

证书在客户端服务里面的使用不是这里的重点,不在这里详讲。

同时我们可以修改CA端的/etc/pki/CA/目录下的index.txt.attr文件,unique_subject = yes改成unique_subject = no ,可以颁发两个相同的证书。

自此,子CA颁发给客户端的数字证书app.crt 就生成了,客户端就可以在相应的服务中使用数字证书了。

五、OpenSSL:吊销证书

1. 在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书:
openssl ca -revoke newcerts/01.pem

这里写图片描述

吊销证书后,可以查看index.txt文件下的信息,R表示颁发的无效,说明吊销成功,如果显示V,则表示证书在生效中

这里写图片描述

2. 指定第一个吊销证书的编号

注意:第一次更新证书吊销列表前,才需要执行

echo 01 > /etc/pki/CA/crlnumber
3.更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem

这里写图片描述

吊销证书crl.pem就生成了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值