使用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 private
# touch index.txt
# echo > 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 4096
Enter pass phrase for ca.key.pem:SECRET
Verifying - Enter pass phrase for ca.key.pem:SECRET
# chmod /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/CA
certs = $dir/certs
private = $dir/private
certificate = $certs/ca.cert.pem
private_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 -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 ( 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 []:alice@example.com
当这些信息输入完成后,生成的公钥证书ca.cert.pem就导入到certs/目录下了。
这样我们就自己创建了一个CA,拥有了该CA的私钥和公钥证书,接下来,我们可以直接使用这个CA私钥和证书签名和颁发客户证书,也可以利用该根私钥和公钥证书创建中间认证机构,中间认证机构是我们这里CA的代理,能够代表我们刚创建的CA签发客户证书。创建中间CA的优点在我们不使用CA根私钥而是使用中间CA的私钥来签发客户证书,CA根私钥只用来签发中间CA的证书撤销列表,这样能够更为妥善地保护CA根私钥。
下面的一篇随笔介绍如何使用根CA创建中间CA并为其颁发证书;
也可以直接利用本文中生成的私钥和证书颁发用户证书。
使用OpenSSL创建自己的CA root certificate的更多相关文章
- openssl创建自己的CA certificate
Create a Certificate Authority private key (this is your most important key): $ openssl req -new -ne ...
- 使用 OpenSSL 创建私有 CA:2 中间证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 本文将在前 ...
- 使用 OpenSSL 创建私有 CA:1 根证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 OpenS ...
- 使用 OpenSSL 创建私有 CA:3 用户证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 在前文&l ...
- OpenSSL创建证书
使用OpenSSL创建证书.采用的OS为CentOS7. 1. 修改OpenSSL的配置文件 vim /etc/pki/tls/openssl.cnf [ CA_default ] dir = /et ...
- 利用OpenSSL创建证书链并应用于IIS7
一.系统环境说明 Linux & OpenSSL Linux localhost -.el5 # SMP Tue Mar :: EDT x86_64 x86_64 x86_64 GNU/Lin ...
- Fiddler 手机端证书安装No root certificate was found
测试过程中发现在浏览器中访问代理服务器及端口,不通,提示要安装证书. 点击证书安装时,提示错误: No root certificate was found,Have you enabled HTTP ...
- 使用openssl创建自签名证书及部署到IIS教程
概要 本文讲解三个部分:1. 创建自签名证书2. 创建自己的证书颁发机构3. 以及如何配置IIS 创建自签名证书 首先,创建一个私钥文件: openssl genrsa -out myselfsign ...
- Fiddler 抓包https配置 提示:creation of the root certificate was not successful 证书安装不成功
window7 提示:creation of the root certificate was not successful 证书安装不成功 1.cmd 命令行 找到fiddler的安装目录 如 ...
随机推荐
- redis使用日志(4):如何让外部服务器访问
开启redis 允许外网IP 访问 在 Linux 中安装了redis 服务,当在客户端通过远程连接的方式连接时,报could not connect错误. 错误的原因很简单,就是没有连接上redis ...
- Ubuntu 14.04环境变量修改
因在开发编译时是找不到命令,原因是将路径添加到环境变量,如何设置环境变量,搜索一下,找到以下关于环境变量设置的几个文件及何时执行. 首先要认识几个和环境变量有关的文件: /etc/profile —— ...
- js如何获取前后连续n天的时间
function GetDateStr(AddDayCount) { var dd = new Date(); dd.setDate(dd.getDate()+AddDayCount);//获取Add ...
- 7款让人惊叹的HTML5粒子动画特效
HTML5的很大一个优势就是可以更加便捷高效地制作网页粒子动画特效,特别是Canvas特性,可以实现在网页上绘制任何图形和动画.本文要分享7款让人惊叹的HTML5粒子动画特效,这些粒子特效都提供源代码 ...
- mybatis中mapUnderscoreToCamelCase自动驼峰命名转换
ssm项目中在mybatis配置文件中添加以下配置,可以将数据库中user_name转化成userName与实体类属性对应,如果数据库使用如user_name的命名方式,实体类采用驼峰命名.配置后无需 ...
- jquery开发的数字相加游戏(你能玩几分)
jquery开发的数字相加游戏,我在一轮中玩了632分(如下图),你能玩几分,哈哈... 我要试一试 下面贡献下这款“数字相加游戏”的开发过程. html部分: <div class=" ...
- MySQL日志——二进制日志
Mac怎么这么坑呢,搞了2小时了.唉 先来一个简单的,挖好坑,明天解决. 终端进入mysql: mysql> set global general_log=on; 然后进行数据库的任意操作: 查 ...
- shell中date使用总结-基于自动定期备份mysql实践
------------------------时间的格式 date [OPTION]... [+FORMAT] echo `date 空格 +'时间格式串'` 调用date必须加符号反引号``,表示 ...
- 依赖注入(Dependency Injection)
Spring的两个核心内容为控制反转(Ioc)和面向切面(AOP),依赖注入(DI)是控制反转(Ioc)的一种方式. 依赖注入这个词让人望而生畏,现在已经演变成一项复杂的编程技巧 或设计模式理念.但事 ...
- C语言 · C++中map的用法详解
转载自:http://blog.csdn.net/sunquana/article/details/12576729 一.定义 (1) map<string, int> Map ...