转自:http://blog.sina.com.cn/s/blog_cfee55a70102wn3h.html

1 公钥密码体系(Public-key Cryptography)

公钥密码体系,又称非对称密码体系。它使用二个密钥,一个用于加密信息,另一个用于解密信息。 这二个密钥间满足一定数学关系,以至用二个密钥中的任何一个加密的数据,只能用另外一个进行数据解密。每个用户拥有二个密钥,一个被称之为公钥,另一个被称之为私钥,并将公钥分发给其它用户。由于这二个密钥间的数学关系, 任何收到该用户公钥的其它用户可以保证发送用此公钥进行加密的数据只有该用户用自己的私钥才能进行解密。 当然此项保证是建立在用户私钥的私有性基础之上。目前最著名的公钥密码算法为RSA算法,它是由Rivest、Shamir和Adleman共同发明的。见图示:

2      摘要算法

摘要算法是一种方法,它将一个任意长度的数据变换为一个定长的数据串,这一定长的数据串被称为消息摘要,也有数据指纹之称。合格的摘要算法必须满足下列条件:

找出具有相同摘要的消息集合在技术上是不可能的;

对一给定的消息摘要,反向计算出消息本身在技术上是不可行的。

数据发送方在数据发送前,首先用摘要算法对数据计算消息摘要,然后将数据和消息摘要一起发送给接受方。接受方用相同的摘要算法对数据重新计算消息摘要,通过对二个消息摘要的比较,可以明确地判断出数据在传输过程中是否被篡改。结果相同表示数据未被修改,而结果不同表明数据被修改或数据被丢失,从而保证数据在传输过程中的完整性。常用的摘要算法有MD2和MD5,它是由RSA实验室发明的,具体算法请参阅RFC1319和RFC1321。 见图示:

3      数字签名

数字签名实际上是非对称密码算法和消息摘要算法的一种组合应用,其目的在于:如某人张三对一段消息进行了数字签名,那么其它的人都能验证这个签名确实是张三签的,同时也能验证张三签名后数据是否被篡改。下面的例子将详细介绍Alice如何对一份合同M进行数字签名,同时Bob又是如何来验证她所签的合同。见图示:

数字签名示意图

Alice准备了一份合同M;

Alice用摘要算法计算出该合同M的消息摘要MD;

Alice用非对称算法和自己的私钥对合同消息摘要MD进行加密,该密文S就是合同的数字签名;

Alice将合同M和合同的数字签名S合并在一起,通过网络传送到合同的接受者Bob;

Bob收到Alice的合同M及合同的数字签名S;

Bob用Alice的公钥对合同签名S进行解密,得到Alice计算的合同摘要MD;

Bob采用相同摘要算法对收到的合同重新计算消息摘要MD';

Bob比较MD与MD'是否相等?

如结果相等,根据摘要算法的特性表明合同在传输过程中未被篡改。同时由于非对称加密算法的特性可以断定合同确实是Alice发送的,因为用Alice公钥能解密成功的数据只有Alice用她自己私钥对其进行加密才能产生,而她的私钥其它人是无法获取的。

为保证用户之间在网上传递信息的安全性、真实性、可靠性、完整性和不可抵赖性,不仅需要对用户的身份真实性进行验证,也需要有一个具有权威性、公正性、唯一性的机构,负责向电子商务的各个主体颁发并管理符合国内、国际安全电子交易协议标准的电子商务安全证,并负责管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。所以需要向电子商务认证授权机构(CA, Certificate Authority)申请签发公钥证书。

4      数字签名私钥及公钥证书生成

以在windows平台生成为例:

第一步,下载openSSL工具,下载

第二步,打开 openssl 文件夹下的 bin 文件夹,执行 openssl.exe 文件;

第三步,生成 RSA 私钥,输入genrsa -out rsa_private_key.pem 1024,此时,我们可以在 bin 文件夹中看到一个文件名为 rsa_private_key.pem 的文件,用 记事本打开它,可以看到-----BEGIN RSA PRIVATE KEY-----开头,-----END RSA PRIVATE KEY-----结尾的没有换行的字符串,这个就是原始的 RSA 私钥。(PHP签名需要原始私钥,JAVA需要对原始私钥做pkcs8转码后再去除开头和结尾)

第四步,创建证书请求。使用私钥生成一个证书请求,输入req -new -out cert.csr -key private.pem,这里我们会要求输入国家、组织、姓名等信息,但是不会要求输入证书有效天数,因为证书有效天数是CA认证中心给我们的;然后我们会把这个生成好的cert.csr(Certificate Signing Request (CSR):证书签名申请)发给CA认证中心,证书请求提交到CA认证中心后会得到一份证书。

(测试时,根据cert.csr生成自签署根证书,暂时不通过CA认证中心自行进行证书签名,这里用是x509

openssl x509 -req -in cert.csr -out public.der -outform der -signkey private.pem -days 3650 //10年有效)

[加密]openssl之数字证书签名,CA认证原理及详细操作的更多相关文章

  1. 探究公钥、私钥、对称加密、非对称加密、hash加密、数字签名、数字证书、CA认证、https它们究竟是什么,它们分别解决了通信过程的哪些问题。

    一.准备 1. 角色:小白.美美.小黑. 2. 剧情:小白和美美在谈恋爱:小黑对美美求而不得.心生怨念,所以从中作梗. 3. 需求:小白要与美美需通过网络进行通信,联络感情,所以必须保证通信的安全性. ...

  2. [区块链|非对称加密] 对数字证书(CA认证)原理的回顾

    摘要:文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的 ...

  3. OpenSSL - 利用OpenSSL自签证书和CA颁发证书

    秘钥操作 这个命令会生成一个1024/2048位的密钥,包含私钥和公钥. openssl genrsa -out private.key 1024/2038                     ( ...

  4. 数字证书及CA介绍

    数字证书及CA介绍 作者: 编程随想  发布时间: 2013-12-03 11:48  阅读: 95280 次  推荐: 69   原文链接   [收藏]   ★ 先说一个通俗的例子 考虑到证书体系的 ...

  5. CA认证原理以及实现(上)

    转自:http://yale.iteye.com/blog/1675344 原理基础数字证书为发布公钥提供了一种简便的途径,其数字证书则成为加密算法以及公钥的载体,依靠数字证书,我们可以构建一个简单的 ...

  6. Java加密解密与数字证书的操作

    1 keytool命令总结 一.创建数字证书 交互模式 使用默认的密钥库.keystore(文件夹是c: Documents and Settingusername)和算法(DSA) keytool  ...

  7. 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等

    本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司已经强制iOS应用必须使用HTTPS协议开发(详见<苹果即将 ...

  8. CA证书申请、认证原理

    (一) 证书的申请 密钥文件的格式用OpenSSL生成的就只有PEM和DER两种格式,PEM的是将密钥用base64编码表示出来的,直接打开你能看到一串的英文字母,DER格式是二进制的密钥文件,直接打 ...

  9. SSL/TLS加密传输与数字证书解读

    什么是ssl? secure socket layer(ssl)协议最初由netscape企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准 ...

随机推荐

  1. spring 4.1 xml配置头部信息 maven配置信息

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://w ...

  2. Shell脚本笔记(四)条件判断

    条件判断 一.条件测试与比较 一)条件测试基础语法 下列测试语法中如果测试的表达式成立,条件测试就会结束,并返回0. 1.test条件测试 语法:test  <测试表达式> 2.中括号条件 ...

  3. Linux之Redis安装

    一.下载解压 1 2 3 4 ## 下载Redis wget http://download.redis.io/releases/redis-2.8.17.tar.gz ## 解压 tar zxvf ...

  4. .ftl文件介绍

    freemarker的文件一般以后缀ftl,ftl文件的头上要写<#assign ww=JspTaglibs["/WEB-INF/webwork.tld"] /这样才能在ft ...

  5. SpringMVC框架简介

    1.简介 SpringMVC也叫Spring Web  mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 01.Spring mvc的优缺点 M ...

  6. Ubuntu16.04搜狗输入法无法输入中文

    搜狗输入法图标显示正常,但是无法输入中文,切换为中文输入时无待选中文,只能输入英文. 这种情况应该是搜狗输入法的配置出现了问题,因为重装输入法时配置文件夹会保留,因此重装无法解决问题. 解决方案: 1 ...

  7. python对象转化为json串、json串转化为python串

    1.1. JSON简介: JavaScript Object Notation(JavaScript对象表示法) JSON是存储和交换文本信息的语法.类似XML JSON比XML更小.更快.更易解析 ...

  8. Python ----pip安装模块提示“unknown or unsupported command install”的解决办法

    安装pip后,使用pip安装模块时,提示“unknown or unsupported command install” 解决方法: 1.cmd运行"where pip" 找出所有 ...

  9. 经典SQL面试题(转)

    以下题目都在MySQL上测试可行,有疏漏或有更优化的解决方法的话欢迎大家提出,我会持续更新的:) 有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录,写一段SQL语句,检索出每 ...

  10. pytorch写一个LeNet网络

    我们先介绍下pytorch中的cnn网络 学过深度卷积网络的应该都非常熟悉这张demo图(LeNet): 先不管怎么训练,我们必须先构建出一个CNN网络,很快我们写了一段关于这个LeNet的代码,并进 ...