创建内部 CA 证书

发布于 2021-05-15 12:52:32 字数 4057 浏览 1665 评论 0

一般使用开源软件 OpenSSL 来创建 CA。首先生成 CA 根证书公钥和私钥。然后将公私钥证书配置到 OpenSSL 的配置文件。之后就可以使用内部 CA 来处理证书签名请求 CSR,生成签名证书了。

确定 CA 文件存储位置

对ubuntu或centos,openssl一般都预装了。没有装,就用apt或yum自己装。首先需要确定CA根证书文件的默认位置。CA 根证书的保存位置在配置文件openssl.cnf中有定义。查找一下openssl.cnf:

$ find /etc -name openssl.cnf
/etc/pki/tls/openssl.cnf
$ cat /etc/pki/tls/openssl.cnf | grep dir
dir             = /etc/pki/CA           # Where everything is kept
database        = $dir/index.txt        # database index file.
certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
private_key     = $dir/private/cakey.pem# The private key
certs           = $dir/cacert.pem       # Certificate chain to include in reply
(其它略)

dir 定义了CA的根目录,certificate 是根证书,private_key 是CA的私钥。

提醒注意的是,不同的 linux 版本上述配置文件也许有所不同。为了省事,下面的文件名尽量按上述的默认值。

生成密钥对和证书

将创建 CA 的根证书。

$ cd /etc/pki/CA
$ openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 365 -subj "/C=CN/ST=Shan Dong/L=Ji Nan/O=Inspur/OU=SBG/CN=iMaiCA"
..............+++
.......................................+++
writing new private key to 'ca-key'
Enter PEM pass phrase: vagrant
Verifying - Enter PEM pass phrase: vagrant
-----

生成的CA一个公钥-私钥对和证书,旨在签署其他证书。当前目录下多了两个文件cakey.pem和cacert.pem。

  • ca-key文件的第一行:-----BEGIN ENCRYPTED PRIVATE KEY-----
  • ca-cert文件的第一行:-----BEGIN CERTIFICATE-----

创建和移动 CA 文件

将 CA 密钥移动到 $dir/private

$ mv cakey.pem /etc/pki/CA/private

添加所需文件:

$ touch  /etc/pki/CA/index.txt; echo 1000 >>  /etc/pki/CA/serial

设置权限ca-key:

chmod 0400 /etc/pki/CA/private/ca-key

修改 OpenSSL 配置文件

打开 OpenSSL 配置文件 /etc/pki/tls/openssl.cnf,确认以下内容。由于我是按默认值生成的文件,配置文件不用改:

[ CA_default ]

dir             = /etc/pki/CA           # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

生成 CSR 并签署

这一步是在测试、验证刚刚建立的内部CA。

CA 的一个重要用途是处理 证书签名请求,生成签名后的证书。

假设一个场景:利用 nginx 搭建https网站。

首先,生成 CSR:

$ openssl req -new -newkey rsa:2048 -nodes -keyout nginx0.key -out nginx0.csr -subj "/C=CN/ST=Shan Dong/L=Ji Nan/O=Inspur/OU=SBG/CN=c7304.ambari.apache.org"

生成了私钥 nginx0.key 和证书签名请求 nginx0.csr。nginx0.csr 的开始一行是 -----BEGIN CERTIFICATE REQUEST-----

下面利用刚创建的CA处理这个证书签名请求:

$ openssl ca -in nginx0.csr -out nginx0.crt

会提示输入 CA 的私钥密码。可以查看一下签名后的证书:

$ openssl x509 -noout -text -in nginx0.crt
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=Shan Dong, L=Ji Nan, O=Inspur, OU=SBG, CN=iMaiCA
        Validity
            Not Before: Aug  2 00:50:53 2017 GMT
            Not After : Aug  2 00:50:53 2018 GMT
        Subject: C=CN, ST=Shan Dong, O=Inspur, OU=SBG, CN=c7304.ambari.apache.org

已上信息省略了一部分。可以看出 Issuer 就是刚建立的 CA,Subjcet 是 nginx 的信息。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

遂心如意

文章 0 评论 0

5513090242

文章 0 评论 0

巷雨优美回忆

文章 0 评论 0

junpengz2000

文章 0 评论 0

13郎

文章 0 评论 0

qq_xU4RDg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文