openssl签发证书

1.介绍

为了搭建https的测试环境,还是别用自己的正式证书了,想自己当把CA,颁发一些证书,自己当根。网上看了一些文章,都是当前目录建立一个demoCA这样的东西,但使用openssl ca 命令的时候,总是各种访问默认目录/etc/pki什么的,所以hi是放弃幻想了。直接用系统的目录做事情吧。

先看一下这个目录的结构吧

    [root@cq01-bce-48-29-31.cq01.baidu.com httpsec]# tree /etc/pki/CA
        /etc/pki/CA
        |-- certs
        |-- crl
        |-- newcerts
        `-- private
    4 directories, 0 files

2.步骤

2.1.生成私钥

进入CA目录,生成我们的一个私钥:

    cd /etc/pki/CA
    openssl genrsa -out private/cakey.pem 2048

大家可能问,公钥跑哪里去了,实际上生成的私钥里既有私钥,也有一些基础信息,用于将来生成公钥

    RSAPrivateKey ::= SEQUENCE {
        version Version,
        modulus INTEGER, -- n
        publicExponent INTEGER, -- e
        privateExponent INTEGER, -- d
        prime1 INTEGER, -- p
        prime2 INTEGER, -- q
        exponent1 INTEGER, -- d mod (p-1)
        exponent2 INTEGER, -- d mod (q-1)
        coefficient INTEGER, -- (inverse of q) mod p
        otherPrimeInfos OtherPrimeInfos OPTIONAL
    }

    RSAPublicKey ::= SEQUENCE {
        modulus INTEGER, -- n
        publicExponent INTEGER -- e
    }

2.2.生成根证书

生成根证书有两种方式,一种是直接生成字签名根证书,一种是先生成根证书的请求文件csr,然后自己跟自己颁根证书

方法一

    openssl req -new -days 3650 -x509 -key ./private/cakey.pem -out  cacert.pem

方法二

    openssl req -new -key ./private/cakey.pem -out  rootca.csr
    openssl req -x509 -days 3650 -key ./private/cakey.pem -in rootca.csr -out cacert.pem

我们可以看下证书的内容

     openssl x509 -in rootca.crt -noout -text

2.4.给别人签发证书

自己当了CA后,就可以给别人签发证书了。客户自己生成一个证书请求,给CA,CA就可以生成证书了

在客户机执行如下操作

    1.生成私钥
    openssl genrsa -out client1_key.pem 2048
    openssl  req -new -key  client1_key.pem  -out client1.csr

最后就是关键的 一步,签发证书,表示CA对证书申请者的认同。

    openssl ca -in client1.csr -out client1.pem

中间可能会提示index.txt文件和serial文件,按他的要求有这个两个文件即可,也可以一开始的时候就初始化好

    touch /etc/pki/CA/index.txt
    echo xyz > /etc/pki/CA/serial

好了,搞定!

期间需要注意的是,root CA的证书申请时候的Country,State,Comm那几个字段要一致,否则签发不了证书。可以自己试试。

补一个,证书导出公钥

openssl x509 -inform PEM -in client1.pem -outform PEM -pubkey -noout