创建私有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
来源:天涯博客
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论