openssl 数字证书 [已经验证可正常运行]

自签名证书是不受客户端 浏览器 信任

数字证书
提供https服务 需要 去CA申请一 个包含 公钥信息 身份信息 数字签名的证书
在使用银行的U盾的时候也是在客户机器上安装了用户的数字证书
数字证书 像 电子身份证一样 是对身份的唯一标识,
数字证书和身份证一样是有期限的
过期之后需要重新申请

CA其实是一家第三方值得信赖的机构 数字证书和数字签名均由该机构颁发 如 Verisign、Thawte、GeoTrust

数字签名 概念

文件后缀名
csr: 证书签发请求(Certificate Signing Request)
CRT 扩展名CRT用于证书 证书可以是DER编码格式 也可以是PEM编码格式 扩展名CER和CRT基本上是一样的
CER 扩展名CER 可以把CRT文件转换为CER文件(CRT和CER必须是相同编码的 DER或者PEM)
.KEY 扩展名KEY用于PCSK#8的公钥和私钥 公钥和私钥可以是DER编码或者PEM编码

证书编码格式
.DER 扩展名DER用于二进制DER编码的证书 大多时候直接用.crt .cer作为证书文件后缀名 一个证书更准确的叫法应该是“DER编码的证 “,”PEM编码的证书”
.PEM 扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书 文件开始由一行”—– BEGIN …“开始

x509 是什么
X.509是一种非常通用的证书格式 所有的证书都符合ITU-T X.509国际标准 因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用
在一份证书中 必须证明公钥及其所有者的姓名是一致的
对X.509证书来说 认证者总是CA或由CA指定的人
一份X.509证书是一些标准字段的集合
这些字段包含有关用户或设备及其相应公钥的信息 X.509标准定义了证书中应该包含哪些信息 并描述了这些信息是如何编码的(即数据格式)

所有的X.509证书包含以下数据
X.509版本号:指出该证书使用了哪种版本的X.509标准 版本号会影响证书中的一些特定信息 目前的版本是3
证书持有人的公钥
包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数

证书的序列号
由CA给予每一个证书分配的唯一的数字型编号 当证书被取消时 实际上是将此证书序列号放入由CA签发的CRL(Certificate
Revocation List证书作废表 或证书黑名单表)中 这也是序列号唯一的原因

主题信息
证书持有人唯一的标识符(或称DN-distinguished name)这个名字在 Internet上应该是唯一的 DN由许多部分组成 看起来象这样: CN=Bob Allen, OU=Total Network
Security Division O=Network Associates, Inc. C=US
这些信息指出该科目的通用名、组织单位、组织和国家或者证书持有人的姓名、服务处所等信息

证书的有效期
证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效

认证机构
证书发布者 是签发该证书的实体唯一的CA的X.509名字 使用该证书意味着信任签发证书的实体 (注意:在某些情况下 比如根或顶级CA证书 发布者自己签发证书)

发布者的数字签名
这是使用发布者私钥生成的签名 以确保这个证书在发放之后没有被撰改过
 
签名算法标识符
用来指定CA签署证书时所使用的签名算法 算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法

PKCS介绍
The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准 其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议
到1999年底 PKCS已经公布了以下标准:
PKCS#1:定义RSA公开密钥算法加密和签名机制 主要用于组织PKCS#7中所描述的数字签名和数字信封[22]
PKCS#3:定义Diffie-Hellman密钥交换协议[23]
PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法 使用MD2或MD5 从口令中派生密钥 并采用DES-CBC模式加密 主要用于加密从一个计算机传送到另一个计算机的私人密钥 不能用于加密消息[24]
PKCS#6:描述了公钥证书的标准语法 主要描述X.509证书的扩展格式[25]
PKCS#7:定义一种通用的消息语法 包括数字签名和加密等用于增强的加密机制 PKCS#7与PEM兼容 所以不需其他密码操作 就可以将加密的消息转换成PEM消息[26]
PKCS#8:描述私有密钥信息格式 该信息包括公开密钥算法的私有密钥以及可选的属性集等[27]
PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型[28]
PKCS#10:描述证书请求语法[29]
PKCS#11:称为Cyptoki 定义了一套独立于技术的程序设计接口 用于智能卡和PCMCIA卡之类的加密设备[30]
PKCS#12:描述个人信息交换语法标准 描述了将用户公钥、私钥、证书和其他相关信息打包的语法[31]
PKCS#13:椭圆曲线密码体制标准[32]
PKCS#14:伪随机数生成标准
PKCS#15:密码令牌信息格式标准[33]

openssl
openssl创建自签名证书

创建根证书私钥长度为2048
openssl genrsa -out ca.key 2048

利用私钥创建根证书
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt

创建长度为2048的SSL证书私匙
openssl genrsa -out server.key 2048

利用刚才的私匙建立SSL证书请求
openssl req -new -key server.key -out server.csr

当前文件夹下运行如下命令创建所需目录:
mkdir dir demoCA && cd demoCA && mkdir newcerts && echo 'xx' > serial && touch index.txt && cd ..
用CA根证书签署SSL自建证书
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
接下来目录下会生成SSL证书及相关文件
分别是server.crt和server.key 接下来就可以利用它们配置https服务了