03--OpenSSL

OpenSSL证书架构

  证书架构在我们互联网http协议上使用最多,https及http over ssl,是对http数据进行加密认证的一种机制,它就是与OpenSSL使用的相关认证机制相同;

基本概念:

  三个组件:

    openssl  多用户的命令行工具

    libcrypto 加解密库

    libssh  ssl协议的实现库文件

 

  PKI(Public Key Infrastructure)

    共享密钥基础架构

    CA  证书认证服务器  

      注册机构用来颁发证书,验证数据的正确性的,类似于公安局,它必须是要权威认证机构来充当;在我们互联网上,类似于VeriSign,就是最有名的CA证书机构;

      证书机构CA是PKI的信任基础,它管理公钥的整个生命周期。其作用包含:发放证书、规定证书的有效期和通过公布证书废除列表(CRL)确保必要时能够废除证书。后面将会在CA进行具体介绍。

      默认情况下,我们的电脑上,默认就有一些证书颁发机构颁发的证书:

    RA  证书注册机构

      注冊机构RA提供用户和CA之间的一个接口。它获取并认证用户的身份,向CA提出证书请求。它主要完毕收集用户信息和确认用户身份的功能。这里指的用户,是指将要向认证中心(即CA)申请数字证书的客户,能够是个人,也能够是集团或团体、某政府机构等。

    CRL  证书的废止列表

      RA在吊销证书后,确保证书无效后,则将证书放入到CRL列表;

    证书存取库  

      维护证书正常状态的一个库文件

 

  在公司中,我们有时候要为自己的内部服务器实现安全保护,会需要搭建内部的CA服务器;而这个内部的CA服务器是只在内网生效,公网是不认可的;

  搭建的这个内网的CA服务器,我们就使用OpenSSL软件程序来实现,对于专业CA服务器的搭建可以选择功能更加强大的OpenCA软件程序,但是我们只介绍OpenSSL;

证书申请及签署步骤

  配置之前,我们先了解下主配置文件【可以不用修改】

  vim /etc/pki/tls/openssl.cnf

    [ca]  //ca的配置目录

    default_ca CA_default

    certs  //存放已经签署的证书

    crl   //被吊销的证书存放的地方

    index.txt  //数据库的索引文件,证书的基本信息都存放在这里

    unique_subject = no  //证书信息是否要唯一

    certificate    //CA服务器给自己的证书

    serial  //证书的序列号

    crlnumber  //吊销证书的序列号

    private_key    //只当证书的私钥存放的路径

    default_day  //证书的有效期

 

  创建私有证书的步骤

    1、生成一个申请请求(公司的各种细腻些,国家省份正真的名字部门的名字)这些信息会存放在证书认证机构中,之后来申请证书的服务器提供的证书申请是要匹配这些信息的;

    2、RA注册机构验证这些信息;

    3、CA签署这个证书;

    4、颁发证书

 

  创建私有CA服务器,配置如下:

    在CA证书服务器上,创建序列号文件:

cd /etc/pki/CA/
touch index.txt  //证书index索引信息
echo 01 > serial  //证书序列号信息

    生成根证书文件

(umask 0777;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)   //创建私有的证书请求文件
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out cacert.pem  //生成证书

    -new  //生成新的证书签署请求

    -x509  //专用于CA生成自签证书

    -key  //指定生成请求时用到的私钥文件

    -days  //指定该证书的有效期

    -out /PATH/TO/SOMECERTFILE  //指定证书的保存路径

    这里唯一要注意的,就是服务器的主机名,一定要于服务器名字保持一致;

 

  为客户端颁发证书发证

    a、客户端到证书的主机生成证书请求

    b、把请求文件传输给CA

    c、签署证书,并将证书发还给请求者

yum install httpd -y
mkdir /etc/httpd/ssl/
cd /etc/httpd/ssl/
(umask 0777;openssl genrsa -out httpd.key 2048)
openssl req -new -key httpd.key -days 365 -out httpd.csr

    再将生成的证书请求发送给服务器端:

scp httpd.csr root@192.168.94.128:/tmp/

    最后去服务器上做证书颁发:

cd /tmp/
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 365

 

    这里会核对信息,如果有一些必须匹配的信息不匹配,证书是无法签发的;

    此时,再目录 /etc/pki/CA/newcerts/ 下,会生成 .pem 文件,就是我们CA证书服务器签署的证书保留文件;

  再将证书传输回客户端;

scp /tmp/httpd.crt root@192.168.94.129:/etc/httpd/ssl/

   这时候,可以再客户端上查看证书信息:

openssl x509 -in /PATH/FORM/CERT_FILE -noout -text/-subject/-serial

证书吊销相关操作与步骤

   如果证书过期,或者提前吊销这个证书,我们如何做呢?

  1、客户端先去获取要调证书的序列号;

openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -subject -serial

  2、CA服务器根据客户端提交的serial和subject信息,对比是否于index.txt文件中信息一致;如果一致,就可以开始吊销证书;

  对比index.txt的信息:

cat /etc/pki/CA/index.txt

  吊销证书:

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

  3、生成吊销证书的编号(第一次吊销某证书的时候需要这个步骤,如果之后再次吊销证书的时候,就不要这个步骤了);

echo 01 > /etc/pki/CA/crlnumber

  4、更新证书吊销列表CRL;

openssl ca -gencrl -out thisca.crl
cat thisca.crl 

  查看crl文件:

openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

  至此,这个证书就已经被吊销;

  【关于pki证书架构,在之后配置https服务的时候会结合实际情况再行说明】

原文地址:https://www.cnblogs.com/BurnovBlog/p/10990052.html