创建私有CA,然后用该CA给证书进行签名

自建CA证书

实验环境:

  • 操作系统:CentOS 7
  • Apache版本:httpd
  • php版本:php7

检查OpenSSL,如果版本低于1.0.1f 建议升级,因为1.0.1f版本之下的OpenSSL有一个Heartbleed漏洞。
版本查看:$openssl version
版本更新:$sudo yum update openssl

首先建立myCA目录用于存放自建CA的相关信息:

cd && mkdir -p myCA/signedcerts && mkdir myCA/private && cd myCA

myCA用于存放 CA 根证书,证书数据库,以及后续服务器生成的证书,密钥以及请求。
signedcerts保存签名证书的 copy,private包含私钥。

之后配置myCA相关参数,在myCA目录下进行:

echo '01'>serial && touch index.txt

然后创建 caconfig.cnf 文件(自建CA的配置文件):

vim ~/myCA/caconfig.cnf

caconfig.cnf文件内容如下:

# My sample caconfig.cnf file.## Default configuration to use when one is not provided on the command line.#[ ca ]
default_ca      = local_ca### Default location of directories and files needed to generate certificates.#[ local_ca ]
dir             = /home//myCA

certificate     = $dir/cacert.pem
database        = $dir/index.txt
new_certs_dir   = $dir/signedcerts
private_key     = $dir/private/cakey.pem
serial          = $dir/serial#       ## Default expiration and encryption policies for certificates.#default_crl_days        = 365
default_days            = 1825
default_md              = SHA256#       policy          = local_ca_policy
x509_extensions = local_ca_extensions#       ## Default policy to use when generating server certificates.  The following# fields must be defined in the server certificate.#[ local_ca_policy ]
commonName              = supplied
stateOrProvinceName     = supplied
countryName             = supplied
emailAddress            = supplied
organizationName        = supplied
organizationalUnitName  = supplied#       ## x509 extensions to use when generating server certificates.#[ local_ca_extensions ]
subjectAltName          = DNS:localhost
basicConstraints        = CA:falsensCertType              = server#       ## The default root certificate generation policy.#[ req ]
default_bits    = 2048
default_keyfile = /home/<username>/myCA/private/cakey.pem

default_md      = SHA256#       prompt                  = no
distinguished_name      = root_ca_distinguished_name
x509_extensions         = root_ca_extensions### Root Certificate Authority distinguished name.  Change these fields to match# your local environment!#[ root_ca_distinguished_name ]
commonName              = MyOwn Root Certificate Authority # CA机构名stateOrProvinceName     = JS                               # CA所在省份countryName             = CN                               # CA所在国家(仅限2个字符)emailAddress            = XXXX@XXX.com                     # 邮箱organizationName        = XXX                              # organizationalUnitName  = XXX                              # #       [ root_ca_extensions ]
basicConstraints        = CA:true

其中dir和default_keyfile的路径需要改成自己的username

生成 CA 根证书和密钥:

export OPENSSL_CONF=~/myCA/caconfig.cnf       #该命令用于给环境变量 OPENSSL_CONF 赋值为caconfig.cnf。openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825             # 生成 CA 根证书和密钥

该步骤需要用户设置一个密码,请牢记。

以上步骤生成了 CA 自签名根证书,和 RSA 公/私密钥对,证书的格式是 PEM,有效期是1825天。

/myCA/cacert.pem: CA 根证书
/myCA/private/cakey.pem: CA 私钥

生成服务器配置文件exampleserver.cnf:

vim ~/myCA/exampleserver.cnf

exampleserver.cnf文件内容如下:

## exampleserver.cnf#[ req ]
prompt             = no
distinguished_name = server_distinguished_name

[ server_distinguished_name ]
commonName              = localhost          # 服务器域名stateOrProvinceName     = JS                 # 服务器所在省份countryName             = CN                 # 服务器所在国家(仅限2个字符)emailAddress            = XXXX@XXX.com       # 邮箱organizationName        = XXX                # organizationalUnitName  = XXX                #

生成服务器证书和密钥:

export OPENSSL_CONF=~/myCA/exampleserver.cnf   # 该命令设置环境变量 OPENSSL_CONF,使得 openssl 更换配置文件。openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM

同样的,需要设置密码。

之后,有2种对临时密钥的操作,选择其一即可:
1.将临时私钥转换为 unencrypted key,即密钥不加密状态:

penssl rsa -in tempkey.pem -out server_key.pem

需要输入密码短语。

2.如果希望将 key 保持为加密状态,直接改名:

mv tempkey.pem server_key.pem

两者的区别是,第二种需要在服务器启动时输入私钥的密码,否则会导致服务器启动失败,但第二种安全性高于第一种,可以更好的保护密钥。

使用 CA key 对服务器证书签名:

export OPENSSL_CONF=~/myCA/caconfig.cnf
openssl ca -in tempreq.pem -out server_crt.pem

删除临时证书和密钥:

rm -f tempkey.pem && rm -f tempreq.pem

现在,自签名的服务器证书和密钥对便产生了:

  • server_crt.pem : 服务器证书文件
  • server_key.pem : 服务器密钥文件

 

具体生成CA文件已存入upyun

来源:https://www.cnblogs.com/ustca/p/12060580.html

版权声明:
作者:tianya
链接:https://tya.zone/p/38.html
来源:天涯博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
创建私有CA,然后用该CA给证书进行签名
自建CA证书 实验环境: 操作系统:CentOS 7 Apache版本:httpd php版本:php7 检查OpenSSL,如果版本低于1.0.1f 建议升级,因为1.0.1f版本之下的OpenSSL有……
<<上一篇
下一篇>>