首页 > 代码库 > 在企业内部使用openssl创建私有CA

在企业内部使用openssl创建私有CA

随着计算机技术的发展,信息网络技术的应用日益深入,这些应用改进了企业工作方式,提高了工作效率。而如何确保在网络中传输的身份认证、机密性、完整性、合法性、不可抵赖性等问题成为企业进一步发展和推动企业信息化应用的关键。要解决这些问题,需要用到CA认证功能。而当企业的应用仅仅在企业内部实现时,我们只需要在企业内部自建CA服务器,完成认证功能,而无需采用第三方机构提供的CA,在总体上节省成本。

 

使用openssl可以实现企业内部自建CA,首先我们需要安装openssl 软件包,利用openssl创建CA服务器,其具体过程如下:

 

一、建立CA服务器:

1、生成密钥,CA服务器自己的密钥存放位置是/etc/pki/CA/private目录下,我们将生成的私钥文件保存在该目录下,操作如下:

# cd /etc/pki/CA

# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048

wKioL1Pctm_jGLikAABVsTiPndM012.jpg

 2、自签证书 

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.perm –out /etc/pki/CA/cacert.pem -days 3655

这样在/etc/pki/CA目录下可以看到cacerts证书生成了,用来验证签名,下发的证书每个都有签名,当有客户端申请该CA服务器签发证书时,会将该CA服务器的证书信息置入为客户端提供的证书中,其中也包含该CA服务器的公钥信息,当多个其他节点相互通信时,各自证书中的CA服务器签名信息,就可以用来验证对方的身份,这样我们的CA服务器就基本建立起来了。

wKiom1PctX_wljqoAAKc88RbttE471.jpg

  3、初始化工作环境

创建CA目录下index.txtserial两个文件,index.txt是为其他客户端签署证书时记录的索引信息,serial文件是用来标记签署的证书的记录序列号信息。

# touch /etc/pki/CA/{index.txt,serial},同时需要为serial文件指定证书签署的其实数值,比如:

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

 

二、其他节点申请证书

(一)节点生成请求,假如这个节点是提供web服务的,我们将这个节点申请的证书保存在web服务的配置目录中,比如/etc/httpd/ssl目录中,步骤如下:

# cd /etc/httpd

# mkdir ssl

# cd ssl/

#  (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048);生成密钥对儿

# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr;生成证书签署请求文件

wKiom1PctlHjhoKgAALhyumdc-w567.jpg注意这里面生成的签署请求文件是为了CA签署以后其他节点确认自己的身份信息的,所以这里面的签署步骤中主机信息要提供自己主机信息。这样证书签署请求文件就生成了,然后发送给CA服务器,由CA服务器来签署之后再发送给客户端即可,其中challenge password是指CA服务器签署时需要使用的密码,建议设置为空。

由于是在企业内使用私有CA,这个文件可以私用scp命令复制给CA服务器即可:# scp httpd.csr 192.168.0.130:/etc/pki/CA/csr

 

CA服务器签署的方法,使用openssl的子命令ca来签署,-in 选项指定读入的文件 -out指定输出签署后的文件,同时还可以指定这个证书的使用期限,比如:# openssl  ca -in /etc/httpd/httpd.csr  -out /etc/httpd/httpd.crt -days 1000,而如果客户端在生成签署请求文件时,输入的信息错误,那么CA服务器在签署时会有如下的报错信息,就会提示出有哪些地方与服务器的CA配置信息不符合而造成无法签署的情况出现,如图:

wKiom1Pctr2xZJkMAAFC5DFfbqc094.jpg

 这种情况下,我们就需要客户端重新生成签署请求文件,填写正确后CA服务器就可以正常签署了。如果客户端请求的csr文件配置信息正确,那么CA服务器端在签署时会有如下提示:

wKioL1PcuAPTXvUlAANPN9gApdo314.jpg

 输入y就为客户端签署了证书,再将签署后的证书文件发送给客户端,这样以后客户端与其他节点通信时,它的身份信息就相当于由CA来做了公证而被认可,如果为多个客户端都提供签名数字证书后,企业内部的通信节点就可以基于自己的CA证书体系来通信了。