杰米·阮对创建一个证书颁发机构和颁发证书和CRL,可以在这里发现了一个伟大指南:https://jamielinux.com/docs/openssl-certificate-authority/
这是我会是什么松散指在回答你的问题。如果您在任何时候都很好奇这些命令的输出是什么样子的话,我会将您引用到他的网站。他们在这里被忽略,以保持这个已经很长的后期管理。
基本上我们需要做到以下几点:
- 创建一个自签名证书作为证书颁发机构
- 使用CA证书签署二叶证书
- 撤销之一叶证书
- 发表一个CRL
创建自签名编辑CA证书
首先我们需要准备CA配置。如果你不想去通过他的教程,你可以简单地使用下面,有些简写配置:
# OpenSSL root CA configuration file.
[ ca ]
default_ca = ca_default
[ ca_default ]
dir = /etc/pki/CA
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/db/root-ca.index
serial = $dir/db/root-ca.serial
RANDFILE = $dir/private/.rand
private_key = $dir/private/root-ca.key
certificate = $dir/certs/root-ca.crt
crlnumber = $dir/db/root-ca.crlnumber
crl = $dir/crl/root-ca.crl
crl_extensions = crl_ext
default_crl_days = 180
default_md = sha384
name_opt = ca_default
cert_opt = ca_default
default_days = 375
preserve = no
policy = policy_loose
[ policy_strict ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 3072
distinguished_name = req_distinguished_name
string_mask = utf8only
default_md = sha384
x509_extensions = int_ca
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
countryName_default = US
stateOrProvinceName_default = MD
localityName_default =
0.organizationName_default = LAB
organizationalUnitName_default =
emailAddress_default =
[ root_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ usr_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
crlDistributionPoints = URI:http://pki.lab.local/int-ca.crl
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
[ server_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = URI:http://pki.lab.local/int-ca.crl
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
[ crl_ext ]
authorityKeyIdentifier=keyid:always
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
这应该被放置在工作目录openssl.cnf
。
您应该修改dir = /etc/pki/CA
行以指向您将要处理的目录,并且如果要启用通过CDP的吊销检查,可能需要将CDP URL更改为指向实际域。
接下来,我们需要创建一些文件和目录由CA预计,然后为CA证书的RSA私钥。注意:CA私钥将使用密码保护。
mkdir db private certs crl newcerts csr & touch db/root-ca.index
echo 1000 > db/root-ca.serial & echo 1000 > db/root-ca.crlnumber
openssl genrsa -aes256 -out private/root-ca.key 4096
现在我们需要使用新的私钥生成一个CA证书。系统会要求您输入您在创建私钥时输入的密码,然后提示输入一些信息,如国家,州和通用名称。通用名称字段是重要的,对于这个测试,我只是把Test Root CA
。
openssl req -config openssl.cnf -key private/root-ca.key \
-new -x509 -days 3650 -sha256 -extensions root_ca \
-out certs/root-ca.crt
一旦命令成功完成,您应该certs/root-ca.crt
看到一个新的证书,您可以用下面的命令查看:
openssl x509 -in certs/root-ca.crt -noout -text
创建叶证书
要创建叶证书(也称为终端实体证书),您需要为每个证书生成另一个私钥。我们将其称为test1
和test2
。
openssl genrsa -aes256 -out private/test1.key 4096
openssl genrsa -aes256 -out private/test2.key 4096
对于其中的每一个,您都将生成CA将用于生成实际证书的证书签名请求(CSR)。当你创建CA证书时,你会被问到类似的问题。您可以使用Test 1
和Test 2
作为常用名称。
openssl req -config openssl.cnf -key private/test1.key
-new -sha256 -out csr/test1.req
openssl req -config openssl.cnf -key private/test2.key
-new -sha256 -out csr/test2.req
您现在应该在csr
目录中有两个证书请求。我们将使用这些来生成证书。您需要输入CA私钥密码来签署这些请求。
openssl ca -config -in csr/test1.req -out certs/test1.crt \
-extensions server_cert -days 365 -notext -md sha256
openssl ca -config -in csr/test2.req -out certs/test2.crt \
-extensions server_cert -days 365 -notext -md sha256
现在,您应该在certs
目录中有两个闪亮的新叶证书。他们可以通过下面的命令查看。
openssl x509 -in certs/test1.crt -noout -text
openssl x509 -in certs/test2.crt -noout -text
吊销证书
现在到了有趣的部分。吊销证书的过程与签名类似。我们将使用CA证书和私钥撤销Test 2
的叶子。以下命令将需要CA私钥密码。
openssl ca -config opnessl.cnf -revoke certs/test2.crt
如果你很好奇,在db/root-ca.index
文件,直到这一点已经被记录的序列号,并出具证书的时间戳,现在应该表现出第二撤销时间戳旁边Test 2
。这是一个普通的文本文件。
发布的CRL
我们产生CRL我们只需做以下的(需要CA私钥密码):
openssl ca -config openssl.cnf -gencrl -out crl/root-ca.crl
查看CRL很简单。使用下面的命令,您应该看到序列号为Test 2
的条目及其撤销的时间戳。
openssl crl -in crl/root-ca.crl -noout -text
要验证已被吊销证书,使用下面的命令:
cat certs/root-ca.crt crl/root-ca.crl > crl/crl-chain.pem
openssl verify -crl_check -CAfile crl/crl-chain.pem certs/test2.crt
使用此为Test 2
应返回吊销证书状态。对Test 1
运行相同的命令应返回OK。
的总结,
假设一切工作正常,最终的结果应该是:
- 一个CA证书在
certs/root-ca.crt
- 一个很好的叶证书在
certs/test1.crt
- 一个被撤销的叶证书在
certs/test2.crt
- One CRL i n
crl/root-ca.crl
注1:这都假设你将在Linux机器上使用OpenSSL。如果您需要关于windows和certutil
的说明,可以提供。
注2:我从本指南中省略了很多与您的问题没有直接关系的指南。如果你想了解这个过程的更多细节,我会再次引用你在顶部发布的链接。
Stack Overflow是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布有关Dev Ops的问题?](http://meta.stackexchange.com/q/134306) – jww
另请参阅[如何使用您的证书颁发机构签署证书签名请求](http:// stackoverflow .com/a/21340898/608639)和[如何使用openssl创建自签名证书?](http://stackoverflow.com/q/10175812/608639) – jww