一、证书制作

1.制作CA证书

  1. ca.key CA私钥
    步骤与使用OpenSSL自签发服务器https证书所述大同小异。

    1. openssl genrsa -des3 -out ca.key 2048 //制作ca.key 私钥
    2. //输入密码后生成
  2. (可选)制作解密后的CA私钥(一般无此必要) ``` openssl rsa -in ca.key -out ca_decrypted.key //输入ca.key私钥

//解密后的ca私钥和ca私钥: ca_decrypted.key
ca.key


3. ca.crt CA根证书(公钥)

openssl req -new -x509 -days 7305 -key ca.key -out ca.crt //输入ca.key私钥后继续

//填写相关信息 Country Name (2 letter code) [XX]: //输入一个国家的名字,两字母代码 可为空 State or Province Name (full name) []: //州或省名称 ,全名 可为空 Locality Name (eg, city) [Default City]: //地区名称,如城市 可为空 Organization Name (eg, company) [Default Company Ltd]: //组织名称,默认有限公司 可为空 Organizational Unit Name (eg, section) []: //组织单元名称 ,可为空
Common Name (eg, your name or your server’s hostname) []:ca.aaa.com //常见的名字(例如你的名字或你的服务器的主机名),输入该网址的域名,必填 Email Address []: //邮件地址,可为空

Please enter the following ‘extra’ attributes to be sent with your certificate request A challenge password []: //输入密码 可为空 An optional company name []:ZX //输入一个公司的名称

//生成的ca公钥 ca.crt
ca_decrypted.key
ca.key


<a name="fef50930"></a>
### 2.制作生成网站的证书并用CA签名认证

1. 生成加密的www.aaa.com证书私钥

openssl genrsa -des3 -out www.aaa.com.key 2048 //输入www.aaa.com.key口令 //再次输入www.aaa.com.key口令


2. 制作解密的www.aaa.com证书私钥

openssl rsa -in www.aaa.com.key -out www.aaa.com.key //输入www.aaa.com.pem口令

//解密后的wwwaaa.com.key证书私钥 www.aaa.com.key


3. 生成签名请求

openssl req -new -key www.aaa.com.key -out www.aaa.com.csr //输入www.aaa.com.pem口令后继续 //填写相关信息,主机名必填 //注:在common name中填入网站域名,如blog.creke.net即可生成改站点的证书,同时也可以使用泛域名如*.creke.net来生成所有二级域名可用的网站证书


4. 用CA进行签名

openssl ca -cert ca.crt -keyfile ca.key -policy policy_anything -days 365 -in www.aaa.com.csr -out www.aaa.com.crt //输入ca私钥继续


- 报错解决
> /etc/pki/CA/index.txt: No such file or directory
> unable to open '/etc/pki/CA/index.txt'    //报错,不能打开这个目录..
> 140576737036104:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/index.txt','r')
> 执行签名命令时,出现“I am unable to access the ../../CA/newcerts directory”

运行命令: touch /etc/pki/CA/index.txt echo 01 >/etc/pki/CA/serial


- <br />再重新执行签名命令。

5. 若Web服务器是Nginx等,可能需要把ca.crt的内容粘贴到www.aaa.com.crt后面使其合并成一个证书文件

cat ca.crt >> www.aaa.com.crt


5. 现在证书已经生成完成,可以配置到服务器使用了。

<a name="111b4b07"></a>
## 二、证书转换

1. 转换PEM 证书

PEM to DER

openssl x509 -outform der -in certificate.pem -out certificate.der

PEM to P7B

openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer

PEM to PFX

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt


2. 转换P7B 证书

P7B to PEM

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

P7B to PFX

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer


3. 转换PFX 证书

PFX to PEM

openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes -out server.pem

PFX to KEY

openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key


4. 转换DER 证书

DER to PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem


5. IIS证书pfx格式转crt和key<br />
将*.pfx文件放到当前目录下然后执行:

openssl pkcs12 -in myssl.pfx -nodes -out server.pem openssl rsa -in server.pem -out server.key openssl x509 -in server.pem -out server.crt ```

三、导入生成的CA证书到Linux或Windows系统

  • Linux导入
    根证书文件: /etc/pki/tls/certs/ca-bundle.crt
    追加当前CA证书到系统: cat ca.crt >>/etc/pki/tls/certs/ca-bundle.crt
  • Windows导入
    直接打开CA证书文件ca.crt然后选择导入类型为受信任的根证书颁发机构。