使用OpenSSL实现CA证书的搭建过程

CA,Catificate Authority,通俗的理解就是一种认证机制。它的作用就是提供证书(也就是服务端证书,由域名,公司信息,序列号,签名信息等等组成)来加强客户端与服务器端访问信息的安全性,同时提供证书的发放等相关工作。国内的大部分互联网公司都在国际CA机构申请了CA证书,并且在用户进行访问的时候,对用户的信息加密,保障了用户的信息安全。理论上来说,任何组织或者个人都可以扮演CA的角色,只不过,难以得到客户端的信任,不能推而广之,最典型应用莫过于12306网站,这个网站就是自己给自己颁发的根证书。
目前能够让浏览器默认支持的CA大厂有很多,Windows 操作系统在安装之初,也默认安装了很多受信任的根证书。可以通过控制面板–Internet选项来进行查看。

windows默认安装的根证书预览

SSL/TLS

SSL/TLS是网络通信过程中非常重要的两个协议。互联网的通信安全就建立在SSL/TLS协议基础之上。他们通过一系列的加密行为保障了通信的安全,是如今互联网通信最主要的应用之一。

SSL/TLS是一个很大的互联网应用,关于他们的介绍互联网上有很多,我们暂时不做详细的介绍。关于SSL/TLS通信的过程大致可以用下面的这张图来进行描述。

SSL/TLS通信示意图

OpenSSL

OpenSSL是一套开源软件,在Linux中可以很容易的安装。它能够很容易的完成密钥生成以及证书管理。我们接下来就利用OpenSSL搭建CA证书,并实现证书的申请与分发。

OpenSSL实现CA证书的搭建

实验环境的准备

CA的配置介绍

创建所需要的文件

CA 自签名证书

颁发证书

查看证书状态

证书吊销

实验环境的准备

首先我们应该准备三个虚拟机,他们分别用来表示根CA证书机构,以及子CA证书机构,和证书申请用户。 那么问题来了,用户向子CA证书机构申请证书,子CA机构向根CA机构申请授权,根CA是如何取得证书的呢?答案是根CA自己给自己颁发的证书。 实验环境的拓扑结构如下图所示。

实验拓扑图

CA配置介绍

要手动创建CA证书,就必须首先了解,OpenSSL中关于CA的配置,配置文件位于下面的/etc/pki/tls/openssl.cnf

#################################################################### [ ca ] default_ca= CA_default #默认CA #################################################################### [ CA_default ] dir=/etc/pki/CA  # CA的工作目录这里其实是定义了一个变量 certs= $dir/certs        # 证书存储路径 crl_dir= $dir/crl  # 证书吊销列表 database= $dir/index.txt # 证书数据库列表 new_certs_dir= $dir/newcerts #新的证书路径 certificate= $dir/cacert.pem  # CA自己的证书 serial= $dir/serial  #下一个证书的编号,十六进制,默认00 crlnumber= $dir/crlnumber #下一个要被吊销的证书编号,十六进制,默认00 crl= $dir/crl.pem  # The current CRL private_key= $dir/private/cakey.pem # CA 的私钥 RANDFILE= $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert # Comment out the following two lines for the "traditional" # (and highly broken) format. name_opt = ca_default # 命名方式 cert_opt = ca_default # CA的选项 # 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 # 默认证书的有效期限 default_crl_days= 30 # how long before next CRL default_md= default # use public key default MD 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  #策略 #这里记录的是 将来CA在搭建的时候,以及客户端申请证书的时候,需要提交的信息的匹配程度。 # For the CA policy [ policy_match ] # match意味着CA以及子CA必须一致 countryName = match # 国家 stateOrProvinceName= match # 州或者省 organizationName= match #组织公司 organizationalUnitName = optional commonName= supplied emailAddress= optional # 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 创建所需要的文件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a1acdca437bded7670d43bcf47b7caca.html