openssl与数字证书的使用

Openssl与数字证书的使用详解

数字证书这个概念大家应该并不陌生,比如我们在利用Nginx提供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编码。

证书编码格式

参考自 http://blog.csdn.net/zhuo_zhibin/article/details/7319926

  • .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证书包含以下数据:

  1. X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。目前的版本是3。
  2. 证书持有人的公钥:包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数。
  3. 证书的序列号:由CA给予每一个证书分配的唯一的数字型编号,当证书被取消时,实际上是将此证书序列号放入由CA签发的CRL(Certificate
    Revocation List证书作废表,或证书黑名单表)中。这也是序列号唯一的原因。
  4. 主题信息:证书持有人唯一的标识符(或称DN-distinguished name)这个名字在 Internet上应该是唯一的。DN由许多部分组成,看起来象这样: CN=Bob Allen, OU=Total Network
    Security Division O=Network Associates, Inc. C=US
    这些信息指出该科目的通用名、组织单位、组织和国家或者证书持有人的姓名、服务处所等信息。
  5. 证书的有效期:证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效。
  6. 认证机构:证书发布者,是签发该证书的实体唯一的CA的X.509名字。使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书)
  7. 发布者的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过。
  8. 签名算法标识符:用来指定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服务了。。

要注意的一点是我们生成的自签名证书是不受客户端浏览器信任的,会在我们打开自签名证书配置的https网站的时候,我使用自己写的ActivedRouter 配置的https服务,证书用的是自签名证书,于是浏览器出现一个如下图的提示

时间: 2024-09-19 00:25:05

openssl与数字证书的使用的相关文章

OpenSSL 与 SSL 数字证书概念贴

SSL/TLS 介绍见文章 SSL/TLS原理详解. 如果你想快速自建CA然后签发数字证书,请移步 基于OpenSSL自建CA和颁发SSL证书 . 首先简单区分一下HTTPS.SSL.OpenSSL三者的关系: SSL是在客户端和服务器之间建立一条SSL安全通道的安全协议,而OpenSSL是TLS/SSL协议的开源实现,提供开发库和命令行程序.常说的HTTPS是HTTP的加密版,底层使用的加密协议是SSL. 1. PKI.CA与证书 PKI 就是 Public Key Infrastructur

openssl数字证书常见格式与协议介绍

原文地址: http://blog.csdn.net/anxuegang/article/details/6157927 证书主要的文件类型和协议有: PEM.DER.PFX.JKS.KDB.CER.KEY.CSR.CRT.CRL .OCSP.SCEP等. PEM – Openssl使用 PEM(Privacy Enhanced Mail)格式来存放各种信息,它是 openssl 默认采用的信息存放方式.Openssl 中的 PEM 文件一般包含如下信息: 内容类型:表明本文件存放的是什么信息内

java加解密-数字证书

一.概述   1.我们了解了对称加密算法.非对称加密算法.数字签名算法应用,他们组合起来使用就是数字证书   2.对称加密算法用来加解密数据,非对称加密算法常用来做密钥交换.数字签名算法主要用来验证数据的不可否认性   3.数字证书:对于我们来说最常见的就是银行给我们提供的数字证书,以文件下载的方式保存,或者以u盾的方式保存   4.数字证书其实就是我们非对称加密算法中存放了相关算法的公钥信息 二.模型分析     我们要制造数字证书.可以用openssl和java的keytools来获得,op

关于数字证书修改密码的问题,望各位大侠不吝赐教

问题描述 问题如下:本人从信任的第三方获取了数字证书,但是这个证书是在制作过程中加入了密码,由于初始加入的密码与需求不符,现需要修改证书的初始密码.另外,请教一下如何向用openssl工具生成的证书中加入密码?CA证书和普通用户证书加入密码与修改.删除密码有什么不同的地方?哪位大侠能帮忙解决一下这几个问题,小弟将感激不尽,在此先谢过了! 解决方案 本帖最后由 repozen 于 2012-08-27 00:11:35 编辑解决方案二:沙发,坐等大神解答~~~解决方案三:有没有第三方提供的CA驱动

golang解析数字证书

golang解析数字证书 基础知识 在解析数字证书之前我们要学习一下数字证书的知识,明白一下数字证书中的一些概念. 下面这些知识是你所要了解的,PKCS#8. PKCS#1.Certificate Chan.Openssl 将PKCS#1和PKCS#8进行转换 等等,基础我就不多聊了下面给几篇文章用于快速扫盲: pkcs1与pkcs8格式RSA私钥互相转换 证书链-Digital Certificates 数字证书.公钥和私钥这三者之间的关系是什么 证书链-Digital Certificate

在ASP/ASP.NET 中处理客户端数字证书

asp.net|客户端    客户端数字证书与基本身份验证(Basic).域服务器的摘要式身份验证.集成 Windows 身份认证或自定义的 Form 认证等方式相比,虽然部署和管理方面稍微复杂一些,但安全性也更好一些,应用上也较为灵活.  在 ASP 和 ASP.NET 中处理和识别客户端数字证书是非常容易的,代码如下: ASP (VBscript)语法:     Dim subject   subject=Request.ServerVariables("CERT_SUBJECT"

C#编程总结(十一)数字证书

这里来讲述数字证书的概念.作用.工作原理以及具体应用.希望能够给大家一个清晰的认识. 一.概念 数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实 体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证.它是由一个由权威机构-----CA机 构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份. 数字证书是一种数字标识,提供用户在互联网上的身份认证,它是一个经证书授权中心数字签名的包含

在ASP及ASP.NET中处理客户端数字证书

客户端数字证书与基本身份验证(Basic).域服务器的摘要式身份验证.集成 Windows 身份认证或自定义的 Form 认证等方式相比,虽然部署和管理方面稍微复杂一些,但安全性也更好一些,应用上也较为灵活. 在 ASP 和 ASP.NET 中处理和识别客户端数字证书是非常容易的,代码如下: ASP (VBscript)语法: Dim subject   subject=Request.ServerVariables("CERT_SUBJECT") 或   subject=Reques

木马很猖狂:网银大盗开始攻数字证书

昨天,中国金融认证中心(CFCA)副总经理曹小青透露,据CFCA的最新监控发现,网银大盗对网银的攻击手段.技术有加快更新的趋势,已经从攻击密码转向攻击数字证书.网银用户如果只将数字证书下载后存放在电脑的IE浏览器上,那么其网银账户仍存在风险---数字证书可能因电脑染上木马病毒而被盗取. CFCA监测发现,目前网上银行交易面临的不安全隐患主要有两种:一种是在未申请数字证书的前提下,网银用户密码被盗取,导致资金被盗:另一种是,虽然申请了数字证书,但由于没有妥善保管,被网银大盗用木马病毒攻破载有数字证