2023年7月10日发(作者:)
Linux下使用openssl制作CA及证书颁发
一. 创建CA ................................................................................ 2
1. 创建CA需要用到的目录和文件: ............................... 2
2. 生成CA的私钥和自签名证书(即根证书) ............... 2
3. 创建一个配置文件,以便后续CA日常操作中使用: .. 3
二. CA的日常操作 ..................................................................... 4
1、创建私钥 .......................................................................... 4
2、查看创建的密钥 .............................................................. 4
3、创建请求文件 .................................................................. 4
4、查看创建的请求文件 ...................................................... 4
5. 根据证书申请请求签发证书 ........................................... 5
6、执行签发命令: .............................................................. 5
7. 吊销证书(作废证书) ................................................... 5
8. 生成证书吊销列表文件(CRL) ................................... 5
9、制作PFX(p12)格式的证书 ........................................ 6
三. 自己生成公钥密钥,并用测试CA签发数字证书 .......... 6
1. 创建密钥和证书请求(证书请求里包含了公钥) ....... 6
2. 用测试CA为testuser签发证书 ..................................... 6
3. 制作一个PKCS12格式的文档(个人数字证书) ....... 7
四、openssl的其他所有参数 .................................................... 7
Linux下使用openssl制作CA及证书颁发
本文旨在利用开源openssl软件,在Linux(或UNIX/Cygwin)下创建一个简单的CA。我们可以利用这个CA进行PKI、数字证书相关的测试。比如,在测试用Tomcat或Apache构建HTTPS双向认证时,我们可以利用自己建立的测试CA来为服务器端颁发服务器数字证书,为客户端(浏览器)生成文件形式的数字证书(可以同时利用openssl生成客户端私钥)。
该简单的CA将建立在用户自己的目录下($HOME/testca),无需超级用户(root)权限。
一. 创建CA
1. 创建CA需要用到的目录和文件:
执行命令如下:
mkdir "$HOME/testca"
cd "$HOME/testca"
mkdir newcerts private conf
chmod g-rwx,o-rwx private
echo "01" > serial
touch
说明:
$HOME/testca为待建CA的主目录。其中newcerts子目录将存放CA签署(颁发)过的数字证书(证书备份目录)。而private目录用于存放CA的私钥。目录conf只是用于存放一些简化参数用的配置文件。
文件serial和分别用于存放下一个证书的序列号和证书信息数据库。
当然,偷懒起见,可以只用按照本文操作即可,不一定需要关心各个目录和文件的作用。
2. 生成CA的私钥和自签名证书(即根证书)
创建文件:
vi "$HOME/testca/conf/"
文件内容如下:
####################################
[ req ]
default_keyfile = $ENV::HOME/testca/private/ default_md = md5
prompt = no
distinguished_name = ca_distinguished_name
x509_extensions = ca_extensions
[ ca_distinguished_name ]
organizationName = TestOrg
organizationalUnitName = TestDepartment
commonName = TestCA
emailAddress = ca_admin@
[ ca_extensions ]
basicConstraints = CA:true
########################################
然后执行命令如下:
cd "$HOME/testca"
openssl req -x509 -newkey rsa:2048 -out -outform PEM -days 2190 -config
"$HOME/testca/conf/"
执行过程中需要输入CA私钥的保护密码,假设我们输入密码: 888888
可以用如下命令查看一下CA自己证书的内容
openssl x509 -in -text -noout
3. 创建一个配置文件,以便后续CA日常操作中使用:
vi "$HOME/testca/conf/"
文件内容如下:
####################################
[ ca ]
default_ca = testca # The default ca section
[ testca ]
dir = $ENV::HOME/testca # top dir
database = $dir/ # index file.
new_certs_dir = $dir/newcerts # new certs dir
certificate = $dir/ # The CA cert
serial = $dir/serial # serial no file
private_key = $dir/private/ # CA private key
RANDFILE = $dir/private/.rand # random number file
default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = md5 # message digest method to use
unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
policy = policy_any # default policy
[ policy_any ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
########################################
二. CA的日常操作
1、创建私钥
openssl genrsa -des3 -out 1024 (创建密钥)
2、查看创建的密钥
openssl rsa -noout -text -in (查看创建的密钥)
3、创建请求文件
openssl req -new -key -out (查看请求文件)
4、查看创建的请求文件
openssl req -noout -text -in (查看创建的请求)
5. 根据证书申请请求签发证书
假设收到一个证书请求文件名为,文件格式应该是PKCS#10格式(标准证书请求格式)。
首先可以查看一下证书请求的内容,执行命令:
openssl req -in -text -noout
将看到证书请求的内容,包括请求者唯一的名字(DN)、公钥信息(可能还有一组扩展的可选属性)。
6、执行签发命令:
#####可以########
openssl x509 -req -in -out -CA -CAkey -CAcreateserial
-days 3650 //没有创建配置文件conf时的命令操作,签发证书。
################/////
openssl ca -in -out -config "$HOME/testca/conf/"
执行过程中会要求输入访问CA的私钥密码(刚才设置的888888)。
完成上一步后,签发好的证书就是,另外$HOME/testca/newcerts里也会有一个相同的证书副本(文件名为证书序列号)。
你可以执行以下语句来查看生成的证书的内容:
openssl x509 -in -text -noout
7. 吊销证书(作废证书)
一般由于用户私钥泄露等情况才需要吊销一个未过期的证书。(当然我们用本测试CA时其时很少用到该命令,除非专门用于测试吊销证书的情况)
假设需要被吊销的证书文件为,则执行以下命令吊销证书:
openssl ca -revoke -config "$HOME/testca/conf/"
8. 生成证书吊销列表文件(CRL)
8.1、准备公开被吊销的证书列表时,可以生成证书吊销列表(CRL),执行命令如下:
openssl ca -gencrl -out -config "$HOME/testca/conf/"
还可以添加-crldays和-crlhours参数来说明下一个吊销列表将在多少天后(或多少小时候)发布。
8.2、可以用以下命令检查的内容:
openssl crl -in -text –noout 9、制作PFX(p12)格式的证书
我们制作的这个PKCS#12文件将包含密钥、证书和颁发该证书的CA证书。该文件可以直接用于服务器数字证书或个人数字证书。
9.1、把前几步生成的密钥和证书制作成一个pkcs12文件的方法执行命令:
openssl pkcs12 -export -in -inkey -out testuser.p12 -config
"$HOME/testca/"
执行过程中需要输入保护密钥的密码(222222),以及新的保护pkcs12文件的密码。
执行完后,testuser.p12即为pkcs12文件。你可以直接拷贝到windows下,作为个人数字证书,双击导入IE后就可以使用了。该文件也可以直接用于tomcat作为服务器证书使用(我尽量在近期再写一篇关于如何自己用tomcat建立HTTPS双向认证测试环境的文章)
9.2、若要查看testuser.p12的内容可以用命令:
openssl pkcs12 -in testuser.p12
三. 自己生成公钥密钥,并用测试CA签发数字证书
我们在平时测试时,可以自己用openssl为服务器或用户生成公钥密钥,并用上面创建的CA签发对应私钥(密钥)的数字证书。
假设,我们就用刚才创建CA的操作系统用户为名为testuser的用户创建数字证书,我们要把待创建的私钥、证书等都放在目录$HOME/testuser下:
1. 创建密钥和证书请求(证书请求里包含了公钥)
创建$HOME/testuser目录并执行命令:
mkdir $HOME/testuser
cd $HOME/testuser
openssl req -newkey rsa:1024 -keyout -keyform PEM -out -outform PEM
-subj "/O=TestCom/OU=TestOU/CN=testuser"
执行过程中需要输入私钥的保护密码,假设我们输入密码: 222222
执行完后,即为用户的密钥,而即为证书请求。
可以用命令查看证书请求的内容:
openssl req -in -text -noout
2. 用测试CA为testuser签发证书
同样还在$HOME/testuser目录下执行命令: openssl ca -in -out -config "$HOME/testca/conf/"
执行过程中需要输入CA的密钥保护密码(刚才设置的888888),并且最后询问你是否要给该用户签发证书时要选y。
执行完后,即为证书,
可以用命令查看证书内容:
openssl x509 -in -text -noout
3. 制作一个PKCS12格式的文档(个人数字证书)
我们制作的这个PKCS#12文件将包含密钥、证书和颁发该证书的CA证书。该文件可以直接用于服务器数字证书或个人数字证书。
把前几步生成的密钥和证书制作成一个pkcs12文件的方法执行命令:
openssl pkcs12 -export -in -inkey -out testuser.p12 -name testuser -chain
-CAfile "$HOME/testca/"
执行过程中需要输入保护密钥的密码(222222),以及新的保护pkcs12文件的密码。
执行完后,testuser.p12即为pkcs12文件。你可以直接拷贝到windows下,作为个人数字证书,双击导入IE后就可以使用了。该文件也可以直接用于tomcat作为服务器证书使用(我尽量在近期再写一篇关于如何自己用tomcat建立HTTPS双向认证测试环境的文章)。
若要查看testuser.p12的内容可以用命令:
openssl pkcs12 -in testuser.p12
说明:
- 本文中名词“个人数字证书”意识为包含私钥和证书的实体,而不是单指只保护公钥的数字证书。- openssl版本OpenSSL 0.9.8g 19
四、openssl的其他所有参数
参数:
-inform arg - input format - default PEM (one of DER, NET or PEM)
-outform arg - output format - default PEM (one of DER, NET or PEM)
-keyform arg - private key format - default PEM
-CAform arg - CA format - default PEM
-CAkeyform arg - CA key format - default PEM
-in arg - input file - default stdin
-out arg - output file - default stdout
-passin arg - private key password source
-serial - print serial number value
-subject_hash - print subject hash value
-issuer_hash - print issuer hash value -hash - synonym for -subject_hash
-subject - print subject DN
-issuer - print issuer DN
-email - print email address(es)
-startdate - notBefore field
-enddate - notAfter field
-purpose - print out certificate purposes
-dates - both Before and After dates
-modulus - print the RSA key modulus
-pubkey - output the public key
-fingerprint - print the certificate fingerprint
-alias - output certificate alias
-noout - no certificate output
-ocspid - print OCSP hash values for the subject name and public key
-ocsp_uri - print OCSP Responder URL(s)
-trustout - output a "trusted" certificate
-clrtrust - clear all trusted purposes
-clrreject - clear all rejected purposes
-addtrust arg - trust certificate for a given purpose
-addreject arg - reject certificate for a given purpose
-setalias arg - set certificate alias
-days arg - How long till expiry of a signed certificate - def 30 days
-checkend arg - check whether the cert expires in the next arg seconds exit 1 if so, 0 if not
-signkey arg - self sign cert with arg
-x509toreq - output a certification request object
-req - input is a certificate request, sign and output.
-CA arg - set the CA certificate, must be PEM format.
-CAkey arg - set the CA key, must be PEM format missing, it is assumed to be in the CA file.
-CAcreateserial - create serial number file if it does not exist
-CAserial arg - serial file
-set_serial - serial number to use
-text - print the certificate in text form
-C - print out C code forms
-md2/-md5/-sha1/-mdc2 - digest to use
-extfile - configuration file with X509V3 extensions to add
-extensions - section from config file with X509V3 extensions to add
-clrext - delete extensions before signing and input certificate
-nameopt arg - various certificate name options
-engine e - use engine e, possibly a hardware device.
-certopt arg - various certificate text options
发布者:admin,转转请注明出处:http://www.yc00.com/web/1688942801a186321.html
评论列表(0条)