OpenSSL创建私有CA

PKI

公开密钥基础建设(英语:Public Key Infrastructure,缩写:PKI),又称公开密钥基础架构、公钥基础建设、公钥基础设施或公钥基础架构,是一组由硬件、软件、参与者、管理政策与流程组成的基础架构,其目的在于创造、管理、分配、使用、存储以及撤销数字证书。

密码学上,公开密钥基础建设借着数字证书认证机构(CA)将用户的个人身份跟公开密钥链接在一起。对每个证书中心用户的身份必须是唯一的。链接关系通过注册和发布过程创建,取决于担保级别,链接关系可能由CA的各种软件或在人为监督下完成。PKI的确定链接关系的这一角色称为注册管理中心(Registration Authority,RA)。RA确保公开密钥和个人身份链接,可以防抵赖。

PKI的组成

  • CA:数字证书认证机构。
  • RA:注册管理中心
  • CRL:证书吊销列表
  • CRT:证书
  • 证书存储库

CA证书申请大致流程


CA证书申请及签署步骤

  1. 客户端生成申请请求;
  2. 服务端RA核验;
  3. 服务端CA签署;
  4. 客户端获取证书;

创建私有CA

配置 OpenSSL

OpenSSL的配置文件位置:/etc/pki/tls/openssl.cnf
以下是跟CA的相关部分,因此知道文件将创建在哪里。

[ CA_default ]

dir     = /etc/pki/CA       # 保存所有信息的目录
certs       = $dir/certs        # 保存证书的目录
crl_dir     = $dir/crl      # 保存证书吊销列表的目录
database    = $dir/index.txt    # 数据库索引文件

确保目录和文件已经创建

[root@localhost CA]# cd /etc/pki/CA
[root@localhost CA]# ls
certs  crl  newcerts  private
[root@localhost CA]# 
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 > serial
[root@localhost CA]# ls
certs  crl  index.txt  newcerts  private  serial

CA自签证书

如果您只是想做一张内网用的电子证书或不想花钱去找个 CA 签署,您可以造一张自签 (Self-signed)的电子证书。当然这类电子证书没有任何保证,浏览器遇到这证书会发出警告,甚至不接收这类证书。使用自签名(self-signed)的证书,它的主要目的不是防伪,而是使用户和系统之间能够进行SSL通信,保证密码等个人信息传输时的安全。

服务端生成CA私钥文件

[root@localhost CA]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

用生成的CA私钥文件生成CA自签证书

[root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.epm -days 7300 -out /etc/pki/CA/cacert.pem

# 各参数的含义
# -new:生成新证书签署请求
# -x509:专用于CA生成自签证书,即自己充当CA认证自己
# -key:生成请求时用到的私钥文件路径
# -days n:证书的有效期限(天)
# -out /PATH/TO/SOMECERTFILE:证书的保存路径
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) [Default City]:BeiJing
Organization Name (eg, company) [Default Company Ltd]:w3iCA Ltd      
Organizational Unit Name (eg, section) []:IT Dept
Common Name (eg, your name or your server's hostname) []:www.w3ica.com
Email Address []:admin@w3ica.com

客户端生成证书请求

客户端生成私钥文件

[root@localhost httpd]# mkdir -p /etc/httpd/ssl
[root@localhost httpd]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

客户端用私钥加密生成证书请求

[root@localhost httpd]# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr

CSR(Certificate Signing Request)包含了公钥和名字信息。通常以.csr为后缀,是网站向CA发起认证请求的文件,是中间文件。

在这一命令执行的过程中,系统会要求填写如下信息:

要求添写的内容
Country Name (2 letter code)使用国际标准组织(ISO)国码格式,填写2个字母的国家代号。中国请填写CN
State or Province Name (full name)省份,比如填写BeiJing
Locality Name (eg, city)城市,比如填写BeiJing
Organization Name (eg, company)组织单位,比如填写公司名称的拼音
Organizational Unit Name (eg, section)比如填写IT Dept
Common Name (eg, your websites domain name)城市,比如填写BeiJing
Email Address邮件地址,可以不填
A challenge password可以不填
An optional company name可以不填

注意

行使 SSL 加密的网站地址。请注意这里并不是单指您的域名,而是直接使用 SSL 的网站名称 例如:www.abc.com。
一个网站这里定义是:
abc.com 是一个网站;
www.abc.com 是另外一个网站;
blog.abc.com 又是另外一个网站。

这里我的填写如下

-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) [Default City]:BeiJing
Organization Name (eg, company) [Default Company Ltd]:w3i Ltd
Organizational Unit Name (eg, section) []:IT Dept
Common Name (eg, your name or your server's hostname) []:www.test.com
Email Address []:admin@test.com 

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

最后把生成的请求文件(/etc/httpd/ssl/httpd.csr)传输给CA
这里我使用scp命令,通过ssh协议,将该文件传输到CA下的/tmp/ssl目录

scp /etc/httpd/ssl/httpd.csr root@192.168.80.130:/tmp/ssl/

CA签署证书

查看申请信息

# openssl req -noout -text -in /tmp/ssl/httpd.csr

在服务端CA上签署证书

[root@localhost CA]# openssl ca -in /tmp/ssl/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

证书通常以.crt为后缀,表示证书文件

可能遇到的问题

The organizationName field needed to be the same in the CA certificate and the request 因为默认使用/etc/pki/tls/openssl.cnf,里面要求其一致,修改organizationName=supplied

修改 /etc/pki/tls/openssl.cnf

# For the CA policy
[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = supplied
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

查看生成的证书的信息的命令

# openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-serial
[root@localhost CA]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -subject
subject= /C=CN/ST=BeiJing/O=w3i Ltd/OU=IT Dept/CN=www.test.com/emailAddress=admin@test.com

最后将生成的证书还给请求者客户端

[root@localhost CA]# scp /etc/pki/CA/certs/httpd.crt root@192.168.80.131:/tmp/

CA吊销证书

(1)知道客户端吊销的证书的serial

# openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

(2)先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致;然后

openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

(3)生成吊销证书的编号(第一次吊销一个证书时才需要执行)

# echo 01 > /etc/pki/CA/crlnumber

(4)更新证书吊销列表

# openssl ca -gencrl -out thisca.crl

查看证书吊销列表

# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值