使用Openssl进行PKI实践(含多级证书详细步骤)

Openssl是Linux下的基础安全工具数据库

先简要介绍一些基础知识:apache

Openssl功能主要有:对称加密(DES、3DES、AES等),非对称加密(RSA),散列(MD五、SHA1等)以及证书的相关操做(建立、申请、颁发、吊销等)安全

PKI体系成为公钥加密体系,组成部分包括:认证中心、注册中心、证书库、证书废止列表。服务器

Openssl经常使用证书格式:X50九、PKCS七、PKCS12。工具

证书文件经常使用存储格式:PEM(BASE64)、PFX或P12(二进制)加密

 

本文主要实践点:ssl

一、根CA相关操做(私钥生成、生成自认证证书)get

二、用户证书相关操做(私钥生成、生成证书签发请求文件、根CA赞成请求签发该证书)input

三、次级CA证书相关操做(从根CA获得次级CA证书和次级CA私钥以后,再给下属用户签发证书)openssl

实验环境:

RHEL 6.3(KVM虚拟机) rootca.testlibq.com

RHEL 6.3(KVM虚拟机) apache.testlibq.com(以APACHE服务器为次级CA)

Windows XP(KVM虚拟机) xp.testlibq.com(以展现证书)

实验步骤:

一、生成根CA证书

登陆到ROOTCA机器

cd /etc/pki/CA/private

openssl genrsa -des3 -out rootca.key 1024  

                 #生成ROOTCA私钥,rootca.key格式为PEM

[设置rootca私钥密码,例如输入rootca]

touch /etc/pki/CA/index.txt   #建立证书数据库文件

echo "01" > /etc/pki/CA/serial  #建立证书序号文件

openssl req -new -x509 -key rootca.key -out /etc/pki/CA/rootca.crt

                 #生成ROOTCA证书(类型为X509),rootca.crt格式为PEM

[输入rootca私钥密码:rootca]

[填入一堆证书信息]

 

因为/etc/pki/tls/openssl.cnf中设置了CA的私钥和证书路径,因此这里使用软连接。

ln -s /etc/pki/CA/private/rootca.key /etc/pki/CA/private/cakey.pem

ln -s /etc/pki/CA/rootca.crt /etc/pki/CA/cacert.pem

这样,CA便设置好了。

查看证书和私钥能够用如下命令:

openssl rsa -in /etc/pki/CA/private/rootca.key -text -noout

openssl x509 -in /etc/pki/CA/rootca.crt -text -noout

 

二、用户证书的相关操做

PS:

用户证书能够在用户端生成私钥和请求文件,而后传递至CA,由CA签发后,发给用户。

也能够由根CA生成用户私钥和请求文件,而后签发后把私钥和证书发给用户。

这里演示后者。

登陆到rootca机器(接实验1)

cd /etc/pki/CA/private

openssl genrsa -des3 -out a.key 1024  #生成用户私钥

[set password of a.key]

openssl req -new -key a.key -out a.csr  #生成用户请求文件

[input password of a.key]

[输入一堆证书信息]

openssl ca -in a.csr

[y,y]

 

生成证书位于/etc/pki/CA/newcerts/01.pem

PS:

该证书类型为X509,若须要PKCS12类型证书,请使用

openssl pkcs12 -export -in /etc/pki/CA/newcerts/01.pem -inkey /etc/pki/CA/private/a.key -out a.pfx[输入私钥密码][设置传输密码]

 

三、生成证书链

此节内容网上文章较少,我研究了很久才搞出来。

 

首先上面两个实验是连着作的,第三个实验请把上面的环境清除。

登陆到ROOTCA

cd /etc/pki/CA/private

touch ../index.txt

echo "01" > ../serial

openssl genrsa -des3 -out rootca.key 1024

ln -s rootca.key cakey.pem

openssl req -new -x509 -key rootca.key -out /etc/pki/CA/rootca.crt -extensions v3_ca

ln -s /etc/pki/CA/rootca.crt /etc/pki/CA/cacert.pem

这里查看一下rootca证书:

openssl x509 -in /etc/pki/CA/rootca.crt -text -noout

肯定extensions中,有basicConstraint CA:TRUE,那么表明正确。

PS:basicConstraint称为基础约束,如有CA:TRUE,证实该证书具备CA效力。(因此上述实验一、2中并不严谨,这点在须要证书链的场合尤其重要)

cd /etc/pki/CA/private

openssl genrsa -des3 -out apache.key 1024

openssl req -new -key /etc/pki/CA/private/apache.key -out apache.csr

openssl ca -in apache.csr -out apache.crt -extensions v3_ca

PS:这个extensions相当重要,关系到apache这个证书有没有资格再颁发证书给用户。

 

登陆到apache主机


ln -s /etc/pki/CA/private/apache.key /etc/pki/CA/private/cakey.pem

ln -s /etc/pki/CA/apache.crt /etc/pki/CA/cacert.pem

下面制做用户证书

cd /etc/pki/CA

touch index.txt

echo "01" > serial

openssl genrsa -des3 -out private/user1.key 1024 [user1]

openssl req -new -key private/user1.key -out private/user1.csr[user1][一堆证书信息]

openssl ca -in private/user1.csr -extensions usr_cert[y,y]

PS:这里-extensions usr_cert没必要要。

制做证书链

将rootca的证书和apache的证书整合到一个文件

cd /etc/pki/CA/certs

cp /etc/pki/CA/apache.crt chain.pem

cat rootca.crt >> chain.pem

验证证书链

openssl verify -CAfile /etc/pki/CA/certs/chain.crt /etc/pki/CA/newcerts/01.pem

(若显示Verify OK,表示验证证书链成功)

转换用户证书为PKCS12

openssl pkcs12 -export -in /etc/pki/CA/newcerts/01.pem -inkey /etc/pki/CA/private/user1.key -out /etc/pki/CA/private/user1.pfx -chain -CAfile /etc/pki/CA/certs/chain.crt

最后将user1.pfx复制到Windows中,导入证书,便于展现。

结果如图:

 

相关文章
相关标签/搜索