使用OpenSSL创建自己的CA root certificate

  在密码学中,CA(Certificate Authority,认证机构)是指一个被多个用户信任的机构,该机构能够创建和指派公钥证书。

  为规范起见,我们先介绍本文可能涉及的术语,

  asymmetric cryptography: 非对称密码学(或公开密钥加密,公钥加密),密钥涉及公钥和私钥组成的密钥对;

  key pair:    密钥对,非对称密码学中的一对公/私密钥;

  private key:   私钥,只应该有所有者才知道的那个密钥;

  public key:   公钥(公开密钥),在非对称加密体系中公开给其他用户的的密钥;

  public key certificate:公开密钥证书,由认证机构采用自己的私钥进行数字签名后的用户公钥证书,包含用户的公钥和身份信息,用于确认公钥证书持有者的身份;

  CA:      认证机构,能够颁发公开密钥证书的机构;

  PKI:      公开密钥基础设施(public key infrastructure);

  许多涉及电子交易或电子转账的网站都需要确保用户安全地连接到自己网站。为了达到这一目的,这些单位需要由一些国际认可的CA(如,VeriSign等)来为自己颁发公钥证书。这些证书被用于建立SSL连接或解密电子签名等用途。申请证书的过程需要经过CA的实地认证,同时为CA支付不菲的认证费用。

  对于仅仅搭建一个VPN或内网环境的应用场景,这样的开销与周期显然是不必要的,因此在一些特定环境下我们只需要自己为自己颁发的公钥证书即可。本文就介绍如何担任自己的CA也即是自己“创办”一个实验的CA机构。

  本文中我们采用/etc/pki/CA作为保存私钥和公钥证书的根目录,为了方便起见下文统称该目录为“证书根目录”。

  我们的实验环境是Ubuntu 14.04 LTS, 但在其他的Linux平台上也应该同样适用,操作系统需要安装OpenSSL,同时该部分的操作要以系统管理员的身份进行,因此下文中的命令行统一采用"#"标识符打头。

  在安装OpenSSL后,系统会在/etc/ssl/目录下生成openssl.cnf文件(不同的操作系统可能位于不同的目录),我们后面需要用到这个文件。

  首先我们要在证书根目录下创建一些子目录,为了后续操作的方便,这些目录的命名遵循openssl.cnf的命名方式,还要在证书根目录下创建index.txt和serial文件用于追踪密钥和证书的记录:

# mkdir /etc/pki/CA# cd /etc/pki/CA # mkdir certs crl newcerts private # chmod 700 private # touch index.txt # echo 1000 > serial

 上面的指令在我们的证书根目录下创建了四个新目录和两个追踪文档,在创建完目录后及时更改权限是一个很好的习惯。

  这里private/目录将存放我们未来创建的CA根私钥,该私钥需要受到严格保护,一旦该私钥泄露,任何获得该私钥的人员均可以利用其创建证书,所以下文中我们将对其进行加密。

  同时,如果将本文的操作应用于小型生产或局域网环境,理想的情况是在生成该目录中的CA根私钥前断开网络连接,将生成后的内容保存到不接入网络的存储介质如U盘等,只有在后续需要使用的时候再连入主机。

  接下来我们要生成自己的CA私钥,下面的命令采用AES-256算法加密CA根私钥,将其保存在private/ca.key.pem文件中,为避免误改,将文件置为只有管理员可读的状态。

  由于选择了加密CA私钥,在生成该私钥时要求输入使用密码,该密码用于在后续使用CA根私钥时解密获得CA私钥,因此该密码应由创建CA私钥的输入并妥善保存。

# openssl genrsa -aes256 -out /etc/pki/CA/private/ca.key.pem 4096Enter pass phrase for ca.key.pem:SECRETVerifying - Enter pass phrase for ca.key.pem:SECRET# chmod 400 /etc/pki/CA/private/ca.key.pem

  接下来我们利用OpenSSL为自己创建公钥证书,假设保存为ca.cert.pem,首先进行公钥证书创建前的配置,

# cd /etc/pki/CA
# cp /etc/ssl/openssl.cnf root_CA.cnf
# vim root_CA.cnf

  模板中的配置项需要进行适当的修改,确保以下字段被设置:

[ CA_default ]

dir = /etc/pki/CAcerts              = $dir/certsprivate            = $dir/privatecertificate        = $certs/ca.cert.pemprivate_key       = $private/ca.key.pem
[ usr_cert ]
# CA签名时常用的扩展
basicConstraints=CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

[ v3_ca ]
# CA的一些典型扩展
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = CA:true
keyUsage = cRLSign, keyCertSign

  接下来创建公钥证书,

# cd /etc/pki/CA# openssl req -new -x509 -days 3650 -key private/ca.key.pem \-sha256 -extensions v3_ca -out certs/ca.cert.pem \-config root_CA.cnf

  上面的一条命令指定了我们要为之前创建的CA根私钥颁发公钥证书,该证书的有效期是10年,采用SHA-256算法生成消息摘要,同时由于这是一个CA证书,需要在命令中指明采用v3_ca扩展,该扩展的具体配置已经在root_CA.cnf文件中设置,采用-config选项包括配置文件。

  该命令执行后首先要求我们输入前文中设置的CA私钥密码,还需要声明自己的一些身份信息:

Enter pass phrase for ca.key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Alice CA
Organizational Unit Name (eg, section) []:Certificate Authority
Common Name (eg, your name or your server‘s hostname) []:Alice CA
Email Address []:[email protected]

  当这些信息输入完成后,生成的公钥证书ca.cert.pem就导入到certs/目录下了。

  这样我们就自己创建了一个CA,拥有了该CA的私钥和公钥证书,接下来,我们可以直接使用这个CA私钥和证书签名和颁发客户证书,也可以利用该根私钥和公钥证书创建中间认证机构,中间认证机构是我们这里CA的代理,能够代表我们刚创建的CA签发客户证书。创建中间CA的优点在我们不使用CA根私钥而是使用中间CA的私钥来签发客户证书,CA根私钥只用来签发中间CA的证书撤销列表,这样能够更为妥善地保护CA根私钥。

  下面的一篇随笔介绍如何使用本文中创建的CA创建中间CA并为其颁发证书;

  也可以直接利用本文中生成的私钥和证书颁发用户证书。

时间: 2024-10-10 05:13:26

使用OpenSSL创建自己的CA root certificate的相关文章

openssl创建自己的CA certificate

Create a Certificate Authority private key (this is your most important key): $ openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key Create your CA self-signed certificate: $ openssl x509 -trustout -signkey ca.key -days 365 -req -in ca

Openssl 创建CA和申请证书

Openssl 创建CA和申请证书 =============================================================================== 概述: 本章是上篇加密解密技术的续,主要介绍Openssl创建CA.申请证书.办法证书的整个操作,具体内容如下: 创建私有CA: 给节点颁发证书: 吊销证书  详情查看上篇加密解密技术:http://1992tao.blog.51cto.com/11606804/1856438 ============

openssl创建CA、申请证书及其给web服务颁发证书

一.创建私有的CA   1)查看openssl的配置文件:/etc/pki/tls/openssl.cnf   2)创建所需的文件 touch /etc/pki/CA/index.txt   echo 01 >/etc/pki/CA/serial 3)CA自签证书生成私钥 cd /etc/pki/CA (umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) 4)生成自签名证书 openssl req -new -x50

使用OpenSSL创建私有CA、签署证书

OpenSSL工具包是Linux上SSL v2/v3和TLS v1协议的实现方式之一,并建提供了常用的加密解密功能. OpenSSL主要由三部分组成: 1:libcrypto:加密库,主要用来实现加密.解密的功能库 2:libssl:实现SSL服务器端功能会话库 3:openssl命令行工具:/usr/bin/openssl 本文仅是介绍如何通过openssl命令创建私有CA,以及如何申请证书.签署证书等过程. 证书主要包含的就是拥有者自身的属性信息.公钥以及CA的签名,核心就是用户的公钥.服务

使用OpenSSL创建私有CA

使用OpenSSL创建私有CA 首先确认安装了openssl和openssl-libs [[email protected] ~]# rpm -qa | grep openssl openssl-libs-1.0.1e-42.el7.x86_64 openssl-1.0.1e-42.el7.x86_64 配置文件/etc/pki/tls/openssl.cnf是ini风格的,其中比较常用的配置就是CA自身的配置和req发证请求相关的配置.配置文件中各配置项的作用描述得很详细了,没必要逐项解释,需

使用 OpenSSL 创建私有 CA:3 用户证书

OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 在前文<使用 OpenSSL 创建私有 CA:2 中间证书>中我们介绍了如何创建中间证书,并生成证书链.本文我们将介绍如何为应用生成用户证书(web 站点的 ssl 证书),并把证书部署到应用服务器上和客户端上.说明:本系列文章的演示环境为 Ubuntu 18.04,OpenSSL 的版本为 1.1.0g.

加密、解密的原理及Openssl创建CA和ssh的基础应用

加密.解密的原理及Openssl创建CA和ssh的基础应用 随着互联网的不断发展和技术的不断成熟,在互联网上传输文件不在安全,在需要传送重要的数据时就必须加密处理. 密码算法分为三种:分别是对称加密,公钥加密,单向加密:以及需要对加密算法的认证,叫做认证协议.下面为大家概述对称加密,公钥加密,单向加密及认证协议 对称加密: 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密. 需要对加密和解密使用相同密钥的加密算法.由于其速度快,对称性

在企业内部使用openssl创建私有CA

随着计算机技术的发展,信息网络技术的应用日益深入,这些应用改进了企业工作方式,提高了工作效率.而如何确保在网络中传输的身份认证.机密性.完整性.合法性.不可抵赖性等问题成为企业进一步发展和推动企业信息化应用的关键.要解决这些问题,需要用到CA认证功能.而当企业的应用仅仅在企业内部实现时,我们只需要在企业内部自建CA服务器,完成认证功能,而无需采用第三方机构提供的CA,在总体上节省成本. 使用openssl可以实现企业内部自建CA,首先我们需要安装openssl 软件包,利用openssl创建CA

SSL及其开源实现OpenSSL+创建私有CA

SSL:Secure sockets Layer 安全套接字层,是工作于传输层和网络之间,利用加密和解密技术,保障应用层各应用程序在网络传输过程中安全传输.主要版本有V1.0, V2.0, V3.0,目前常用版本是V2.0. SSl会话主要三步: 客户端向服务器端索要并验正证书: 双方协商生成"会话密钥": 双方采用"会话密钥"进行加密通信: 其中前两步称为会话握手,主要可分为四个阶段: 第一阶段:ClientHello:客户端向服务器端发送会话,内容如下: 支持的