本篇博客是一个自制CA并实现颁发证书的手册,内容涵盖如何自制CA、客户端如何向CA申请证书以及CA签署证书的过程,内容并不困难,旨在帮助理解CA的工作流程,对于正在学习网络安全方面知识的同学兴许有点帮助


本测试实现内容:           

    1、创建CA

        生成一对用于制作自签证书的密钥

        生成自签证书

    2、客户端(相对于CA而言的客户端)

        生成一对用于申请CA证书密钥

        生成证书颁发请求;

        将请求发给CA 

    3、CA端

        签署证书

        将签署完成的证书传送给客户端    


说明:

    本流程均在VMware10上实现

    

准备:

    1、创建两台虚拟机rhel.ca, rhel.server(本文使用的是Redhat Enterprise Linux 5.8),

      (其中rhel.ca将充当证书权威机构(CA)的角色,rhel.server将充当CA的客户端)

    2、IP设置: rhel.ca: 192.168.134.2, rhel.server: 192.168.134.8

    

实现:

    rhel.ca:

        1、进行必要的配置:(修改openssl配置文件)

        cd /etc/pki/tls/
        vim openssl.cnf
        #修改以下内容:
            [ CA_default ]
            # 修改CA路径为决定路径
            dir             = /etc/pki/CA           
            # 修改CA有效期限
            default_days    = 3657
            
            [ req_distinguished_name ]
            # 启用默认值,根据个人情况修改即可
            countryName_default             = CN
            stateOrProvinceName_default     = Shandong
            localityName_default            = Qindao
            0.organizationName_default      = TBcompany
            organizationalUnitName_default  = Tech

        2、制作自签证书

        cd /etc/pki/CA/
        # 说明:这里将生成的私钥存储为private/cakey.pem, CA证书存储为cacert.pem,
            以及CA需要使用到的文件及目录均存储于CA目录下: 
            包括:certs,newcerts,crl,index.txt,serial
            若要自行定义,需要修改openssl.cnf中的相关内容 
            
        # 生成秘钥(公钥算法采用rsa加密方式,输出长度2048)
        (umask 077; openssl genrsa 2048 > private/cakey.pem)
        # 生成CA证书(CA证书格式x509)
        openssl req -new -x509 -key private/cakey.pem -out cacert.pem

Linux上使用openssl实现模拟CA_数字证书

        # 创建CA需要的目录及相关文件

        mkdir certs newcerts crl
            # certs: 证书存储路径
            # newcerts: 新签证书存储路径
            # crl: 吊销证书存储路径(证书吊销列表)
        touch index.txt  # 存储证书索引 
        echo 00 > serial # 待使用证书编号

    

    rhel.server:(假设httpd是web服务器文件存储位置)

        3、申请CA证书

        cd
        mkdir httpd/ssl -pv  
        cd httpd/ssl/
        # 生成秘钥制作证书颁发请求
        (umask 077; openssl genrsa -out ./httpd.key 1024)
        openssl req -new -key httpd.key -out httpd.csr
            # 注意:此处到公司名为止需要与CA一致,否则CA将会拒签证书

Linux上使用openssl实现模拟CA_CA_02

        # 将证书颁发请求发送给CA,这里直接使用scp将请求复制到CA的root目录下
        scp httpd.csr root@192.168.134.8:/root/

    rhel.ca:

        4、签发ca证书并将证书发送至客户端
        openssl ca -in httpd.csr -out httpd.crt -days 365 # 证书有效期为一年
        scp httpd.crt root@192.168.134.2:/root/httpd/ssl/
        5、查看CA相关文件信息
        newcerts存储着上面签署的证书,index.txt中记录证书相关数据,serial自增1

        

Linux上使用openssl实现模拟CA_openssl_03


    至此,server的证书就已经申请成功了,进入/root/httpd/ssl目录将会看到申请到的证

    书httpd.crt,本测试完成后,CA的工作流程大致就能了解了,能力有限,不足之处还望指教