转:http://blog.chinaunix.net/space.php?uid=12072359&do=blog&id=2962042
公钥,私钥,证书
Bob,Alice和数字证书
网络
安全中最知名的人物大概就是Bob和Alice了,因为很多安全原理阐述中都用这两个虚拟人物来进行实例说明。
我们来看看Bob是怎么从CA中心获得一个数字证书的:
1、
Bob首先创建他自己的密钥对(key pair),包含公钥和私钥;
2、
Bob通过网络把他的公钥送到CA中心,公钥中包含了Bob的个人鉴别信息(他的名字、地址、所用设备的序列号等等)。这些信息是证书所必需的;
3、
这个证书申请在CA中心服务器
上会一直处于等待(pending)状态,直到CA中心的某人开始处理Bob的请求;
4、
在CA中心的某人鉴定并确认了Bob确实是那个提交公钥的人。为了确定Bob和密钥之间的对应关系,这个确认过程会通过某种人和人之间、带外的方式进行;
5、
Bob定期地对CA服务
器进行查询,希望他的证书申请过程能完成并已可取回;
6、
CA中心创建并签署一个包含Bob的公钥及个人信息的证书,从而保证密钥的确实性;
7、
Bob查询CA服务器,发现证书已准备好,马上下载
证书并将证书存储起来;
8、
Bob现在可以使用证书来发布他的公钥,而其他使用Bob证书的人可以通过检验CA中心的签名(检验CA签名需要CA的公钥)来验证证书的确实性。
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
一,公钥私钥
1,公钥和私钥成对出现
2,公开的密钥叫公钥,只有自己知道的叫私钥
3,用公钥加密的数据只有对应的私钥可以解密
4,用私钥加密的数据只有对应的公钥可以解密
5,如果可以用公钥解密,则必然是对应的私钥加的密
6,如果可以用私钥解密,则必然是对应的公钥加的密
明白了?
假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们,然后我告诉大家,1是我的公钥。
我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。
我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。
现在我们知道用公钥加密,然后用私钥来解密,就可以解决安全传输的问题了。如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知道我的公钥是1,那么这种加密有什么用处呢?
但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是
c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他解密看是不是c。他用我的公钥1解密,发现果然是c。这个时候,他会想到,能够用我的公钥解
密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。这样我们就能确认发送方身份了。这个过程叫做数字签名。当然
具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。
好,我们复习一下:
1,公钥私钥成对出现
2,私钥只有我知道
3,大家可以用我的公钥给我发加密的信了
4,大家用我的公钥解密信的内容,看看能不能解开,能解开,说明是经过我的私钥加密了,就可以确认确实是我发的了。
总结一下结论:
1,用公钥加密数据,用私钥来解密数据
2,用私钥加密数据(数字签名),用公钥来验证数字签名。
在实际的使用中,公钥不会单独出现,总是以数字证书的方式出现,这样是为了公钥的安全性和有效性。
二,SSL
我和我得好朋友x,要进行安全的通信。这种通信可以是QQ聊天,很频繁的。用我的公钥加密数据就不行了,因为:
1,我的好朋友x没有公私钥对,我怎么给他发加密的消息啊?(注:实际情况中,可以双方都有公私钥对)
2,用公私钥加密运算很费时间,很慢,影响QQ效果。
好了,好朋友x,找了一个数字3,用我的公钥1,加密后发给我,说,我们以
后就用这个数字来加密信息吧。我解开后,得到了数字3。这样,只有我们两个人知道这个秘密的数字3,别的人都不知道,因为他们既不知x挑了一个什么数字,
加密后的内容他们也无法解开,我们把这个秘密的数字叫做会话密钥。
然后,我们选择一种对称密钥算法,比如DES,(对称算法是说,加密过程和解密过程是对称的,用一个密钥加密,可以用同一个密钥解密。使用公私钥的算法是非对称加密算法),来加密我们之间的通信内容。别人因为不知道3是我们的会话密钥,因而无法解密。
好,复习一下:
1,SSL实现安全的通信
2,通信双方使用一方或者双方的公钥来传递和约定会话密钥(这个过程叫做握手)
3,双方使用会话密钥,来加密双方的通信内容
上面说的是原理。大家可能觉得比较复杂了,实际使用中,比这还要复杂。不过庆幸的是,好心的先行者们在操作系统或者相关的软件中实现了这层(Layer),并且起了一个难听的名字叫做SSL,(Secure Socket Layer)。
分享到:
相关推荐
1.go生成rsa证书 自签名证书 2.go生成ecc证书 自签名证书 ...4.对自已生成的公钥私钥进行签名,得到签名证书crt 5.通过设置云dns账号直接生成freessl证书 6.openssl一些惯用方法介绍 7.如生成pfx格式的证书包文件的方法
java公钥加密私钥解密与数字证书,数字证书的生成看这里 http://hi.baidu.com/chenminliang/blog/item/2b30db24920ae0338744f9db.html
通过RSA.PFX证书提取XML/PEM公钥私钥,源码,目前只支持PFX格式的提取,通过RSA.PFX证书提取XML/PEM公钥私钥,源码,目前只支持PFX格式的提取
数字证书原理,公钥私钥加密原理基础概念和原理,数字证书的管理与使用
公钥私钥数字签名数字证书详解
详细介绍了区块链使用的不对称加密在数字证书数字签名的应用
获取RSA公钥+私钥
提供获取证书文件、私钥文件以及获取公钥,VS2017开发的C++代码
1.1、公钥密码体制(public-key cryptography)公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:加密:通过加密算
openssl 中把pem格式的SM2密钥,解析成EC_KEY格式的key,然后解析出key中公钥和私钥
1、很多刚接触加解密的同学会对单钥、双钥加密、公钥、私钥、数字证书、数字签名的概念感到头疼,这篇文章就是给你治病的。 2、童叟无欺,保证你看了过后会很满意。
对密钥,密钥对,公钥,证书,私钥,jks,keystore,truststore,cer,pfx
生成规则中需要更改的内容 只需要更改中心公钥索引centralCAPublicKeyIndex、证书失效日期certificateExpired、发开机构公钥gy、存放路径address 将上述内容更改后,执行main方法即可完成根证书以及公钥私钥的生成,...
背景 随话说的好啊,好比不如烂笔头,之前开发联调OK后,闲置了半年,结果今天再去搞公钥,发现完全忘记了生成规则。...从下图我们可以看到通过 ConversionUtils.byteToHex方法获取到了公钥和私钥证书内容字符串
本文以Android签名JKS格式的证书为例: package com.test; import java.io.FileInputStream; import java.security.Key; import java.security.KeyStore; import java.security.PrivateKey; import java.security....
公钥加密,数字签名,公钥认证,认证授权,基于 PKI 授权.zip
PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解 php代码简单生成 容易理解
为需要的内容不多,主要是RSA加解密部分,所以就删除了不必要的,公钥私钥pem需要就用原来大佬的软件生成吧。(当然附件也打包了一份)。做了一些小修改,主要是演示 RSA有关 加密和解密 安全性的部分。公钥加密,...
银联在线接口开发及验证,公钥私钥生成。如不能运行的请导入servlet-api包
Linux环境生成cer证书、私钥和转码方式 操作示例; 证书使用RSA(1024位)证书,可以使用自签名证书,也可以向类似CFCA这样的三方机构申请证书。...公钥证书以 X.509(v3) 标准格式进行编码,私钥证书以pkcs8格式编码。