创建内部 CA 证书
一般使用开源软件 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论