博舍

CA认证的原理和流程及https原理 证书生成流程

CA认证的原理和流程及https原理

1.什么是CA证书。

 

看过一些博客,写的比较形象具体。

◇普通的介绍信

想必大伙儿都听说过介绍信的例子吧?假设A公司的张三先生要到B公司去拜访,但是B公司的所有人都不认识他,他咋办捏?常用的办法是带公司开的一张介绍信,在信中说:兹有张三先生前往贵公司办理业务,请给予接洽......云云。然后在信上敲上A公司的公章。

张三先生到了B公司后,把介绍信递给B公司的前台李四小姐。李小姐一看介绍信上有A公司的公章,而且A公司是经常和B公司有业务往来的,这位李小姐就相信张先生不是歹人了。

这里,A公司就是CA证书

◇引入中介机构的介绍信

好,回到刚才的话题。如果和B公司有业务往来的公司很多,每个公司的公章都不同,那前台就要懂得分辨各种公章,非常滴麻烦。所以,有某个中介公司C,发现了这个商机。C公司专门开设了一项“代理公章”的业务。

今后,A公司的业务员去B公司,需要带2个介绍信:

介绍信1

含有C公司的公章及A公司的公章。并且特地注明:C公司信任A公司。

介绍信2

仅含有A公司的公章,然后写上:兹有张三先生前往贵公司办理业务,请给予接洽......云云。

某些不开窍的同学会问了,这样不是增加麻烦了吗?有啥好处捏?

主要的好处在于,对于接待公司的前台,就不需要记住各个公司的公章分别是啥样子的;他/她只要记住中介公司C的公章即可。当他/她拿到两份介绍信之后,先对介绍信1的C公章,验明正身;确认无误之后,再比对介绍信1和介绍信2的两个A公章是否一致。如果是一样的,那就可以证明介绍信2是可以信任的了。

 

◇什么是证书?

“证书”洋文也叫“digitalcertificate”或“publickeycertificate”(专业的解释看“这里”)。

它是用来证明某某东西确实是某某东西的东西(是不是像绕口令?)。通俗地说,证书就好比例子里面的公章。通过公章,可以证明该介绍信确实是对应的公司发出的。

理论上,人人都可以找个证书工具,自己做一个证书。那如何防止坏人自己制作证书出来骗人捏?请看后续CA的介绍。

◇什么是CA?

CA是CertificateAuthority的缩写,也叫“证书授权中心”。(专业的解释看“这里”)

它是负责管理和签发证书的第三方机构,就好比例子里面的中介——C公司。一般来说,CA必须是所有行业和所有公众都信任的、认可的。因此它必须具有足够的权威性。就好比A、B两公司都必须信任C公司,才会找C公司作为公章的中介。

◇什么是CA证书?

CA证书,顾名思义,就是CA颁发的证书。

前面已经说了,人人都可以找工具制作证书。但是你一个小破孩制作出来的证书是没啥用处的。因为你不是权威的CA机关,你自己搞的证书不具有权威性。

这就好比上述的例子里,某个坏人自己刻了一个公章,盖到介绍信上。但是别人一看,不是受信任的中介公司的公章,就不予理睬。坏蛋的阴谋就不能得逞啦。

文本后续提及的证书,若无特殊说明,均指CA证书。

 

2.证书的签发过程:

 

a.服务方S向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;

b.CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;

c.如信息审核通过,CA会向申请者签发认证文件-证书。

证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;

签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用CA的私钥对信息摘要进行加密,密文即签名;

d.客户端C向服务器S发出请求时,S返回证书文件;

e.客户端C读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;

f.客户端然后验证证书相关的域名信息、有效时间等信息;

g.客户端会内置信任CA的证书信息(包含公钥),如果CA不被信任,则找不到对应CA的证书,证书也会被判定非法。

在这个过程注意几点:

1.申请证书不需要提供私钥,确保私钥永远只能服务器掌握;

2.证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名;

3.内置CA对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书;

4.证书=公钥+申请者与颁发者信息+签名;

 

 3.http存在的问题(引用:http://blog.csdn.net/wangjun5159/article/details/51510594)

http通信存在的问题容易被监听 http通信都是明文,数据在客户端与服务器通信过程中,任何一点都可能被劫持。比如,发送了银行卡号和密码,hacker劫取到数据,就能看到卡号和密码,这是很危险的被伪装 http通信时,无法保证通行双方是合法的,通信方可能是伪装的。比如你请求www.taobao.com,你怎么知道返回的数据就是来自淘宝,中间人可能返回数据伪装成淘宝。被篡改 hacker中间篡改数据后,接收方并不知道数据已经被更改共享密钥加密和公开密钥加密

后续内容的需要,这里插播一段共享密钥加密和公开密钥加密

共享密钥加密 共享密钥的加密密钥和解密密钥是相同的,所以又称为对称密钥公开密钥加密 加密算法是公开的,密钥是保密的。公开密钥分为私有密钥和公有密钥,公有密钥是公开的,任何人(客户端)都可以获取,客户端使用公有密钥加密数据,服务端用私有密钥解密数据。异同 共享密钥加密与公开密钥加密相比,加解密处理速度快,但公开密钥更适应互联网下使用https解决的问题

https很好的解决了http的三个缺点(被监听、被篡改、被伪装),https不是一种新的协议,它是http+SSL(TLS)的结合体,SSL是一种独立协议,所以其它协议比如smtp等也可以跟ssl结合。https改变了通信方式,它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式

防监听 数据是加密的,所以监听得到的数据是密文,hacker看不懂。防伪装 伪装分为客户端伪装和服务器伪装,通信双方携带证书,证书相当于身份证,有证书就认为合法,没有证书就认为非法,证书由第三方颁布,很难伪造防篡改 https对数据做了摘要,篡改数据会被感知到。hacker即使从中改了数据也白搭。https连接过程客户端发送请求到服务器端服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端客户端使用共享密钥解密数据SSL加密建立………

 

客户端认证的通信的过程客户端需要认证的过程跟服务器端需要认证的过程基本相同,并且少了最开始的两步。这种情况都是证书存储在客户端,并且应用场景比较少,一般金融才使用,比如支付宝、银行客户端都需要安装证书后续的问题怎样保证公开密钥的有效性 你也许会想到,怎么保证客户端收到的公开密钥是合法的,不是伪造的,证书很好的完成了这个任务。证书由权威的第三方机构颁发,并且对公开密钥做了签名。https的缺点 https保证了通信的安全,但带来了加密解密消耗计算机cpu资源的问题,不过,有专门的https加解密硬件服务器各大互联网公司,百度、淘宝、支付宝、知乎都使用https协议,为什么? 支付宝涉及到金融,所以出于安全考虑采用https这个,可以理解,为什么百度、知乎等也采用这种方式?为了防止运营商劫持!http通信时,运营商在数据中插入各种广告,用户看到后,怒火发到互联网公司,其实这些坏事都是运营商(移动、联通、电信)干的,用了https,运营商就没法插播广告篡改数据了。

4.比较完整的过程:

1.客户端发起HTTPS请求

这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。

2.服务端的配置

采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

3.传送证书

这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

4.客户端解析证书

这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

5.传送加密信息

这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6.服务段解密信息

服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

7.传输加密后的信息

这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

8.客户端解密信息

客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

 

5.总结整个过程:

1.服务器向CA机构获取证书(假设这个证书伪造不了),当浏览器首次请求服务器的时候,服务器返回证书给浏览器。(证书包含:公钥+申请者与颁发者的相关信息+签名)

2.浏览器得到证书后,开始验证证书的相关信息,证书有效(没过期等)。(验证过程,比较复杂,详见上文)。

3.验证完证书后,如果证书有效,客户端是生成一个随机数,然后用证书中的公钥进行加密,加密后,发送给服务器,服务器用私钥进行解密,得到随机数。之后双方便开始用该随机数作为钥匙,对要传递的数据进行加密、解密。

CA证书认证流程

什么是CA?数字证书认证机构

数字证书认证机构(CerticateAuthority,缩写为CA),是负责发放和管理数字证书的权威机构并作为受信任的第三方,承担公钥体系中公钥合法性检验的责任。

什么是证书?

共享密钥加密(对称密钥加密):加密和解密使用相同密钥。对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES。公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听盗走。常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、ElGamal、DSA(数字签名用)。

要使数字证书有用,它的结构必须采用一种可理解且可靠的形式,以便人们可以轻松地检索并理解证书内的信息。例如,护照采用这样一种结构:人们可以轻松地理解以前从未见过的那一类护照中的信息。同样,只要数字证书是标准化的,则无论颁发该证书的是哪个机构,人们都可以阅读并理解该证书。S/MIME标准规定:用于S/MIME的数字证书应遵守国际电信同盟(ITU)X.509标准。S/MIME版本3明确要求数字证书应遵循X.509的第3版。由于S/MIME依赖于已建立的数字证书结构公认标准,因此S/MIME标准建立在该标准的发展之上,从而提高了它的认可度。

CA证书

X.509标准规定数字证书应包含标准化信息。具体地说,X.509版本3证书包含下列字段:版本号证书所遵循的X.509标准的版本。序列号唯一标识证书且由证书颁发机构颁发的编号。签名算法:CA用于对证书进行数字签名的hash算法。

证书签名:

颁发者名称:实际颁发该证书的证书颁发机构的标识。有效期:数字证书保持有效的时间段,并包含起始日期和过期日期。使用者名称:数字证书所有者的姓名。使用者公钥信息:与数字证书所有者关联的公钥以及与该公钥关联的特定公钥算法。颁发者唯一标识符:可以用来唯一标识数字证书颁发者的信息。使用者唯一标识符:可以用来唯一标识数字证书所有者的信息。扩充信息:与证书的使用和处理有关的其他信息。证书颁发机构的数字签名:使用指纹算法中指定的HASH算法以及证书颁发机构的私钥进行加密的数字签名。X.509通用的证书格式:包含三个文件:key,csr,crt。key是私钥文件。csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名。crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息。

Diffie-Hellman加密算法

密钥协商算法:通讯双方(张三、李四)需要先约定好算法参数(algorithmparameters):一个素数p作为模数,一个素数g作为基数(g也称为“生成元”)。这两个算法参数是可以对外公开滴。

对于张三而言,需要先想好一个秘密的自然数a作为私钥(不能公开),然后计算A=g/amodp作为自己的公钥(可以公开)。

对李四而言也类似,先想好一个秘密的自然数b作为私钥〈不能公开),然后计算B=gAbmodp作为自己的公钥(可以公开)。

张三和李四互相交换各自的公钥。然后张三计算出k=B/amodp,李四计算出k=ANbmodp

好处:张三和李四分别计算出来的k必定是一致的张三和李四都无法根据已知的数来推算出对方的私钥(张三无法推算出b,李四无法推算出a)对于一个旁观者(偷窥者),虽然能看到p,g,A,B,但是无法推算出a和b(就是说,旁观者无法推算出双方的私钥),自然也无法推算出k

CA证书认证流程:

1、申请认证(证书)服务端S向第三方权威机构CA申请证书,服务器S先生成公钥和私钥对确认信息里面绑定我们当前使用哪个域名,以及申请者以及公钥生成请求文件.csr(csr是我们服务端S向CA提交申请的文件)注意:提交信息里不包含私钥2、审核信息

CA收到服务端S发送的信息先去审核(CA通过线上、线下等多种手段验证申请者提供信息的真实性)

审核通过,CA会向申请者签发认证文件-证书。

证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名

3、签发证书

签名证书里的明文信息通过哈希算法加密------->摘要1(注意:这个就是后面的摘要1)

CA机构会产生一对公钥和私钥,用私钥对信息(摘要1)加密,拿到了一个签名

和组成了|证书|,把这个证书发给服务器

4、返回证书服务器S把CA证书发送给客户端C5、验证证书

客户端会内置信任CA的证书信息(包含公钥),如果CA不被信任,则找不到对应CA的证书,证书也会被判定非法。

客户端C利用对应CA的公钥解密签名数据,拿到了摘要1

客户端C读取证书中的相关的明文信息,采用哈希算法加密得到信息摘要2

对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法

然后提取出公钥pub_server

通过这一步客户端认可了服务器,拿到了服务器的公钥

在这个过程注意几点:1.申请证书不需要提供私钥,确保私钥永远只能服务器掌握;2.证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名;3.内置CA对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书;4.证书=公钥+申请者与颁发者信息+签名;

iOS创建苹果证书、制作p12证书流程

目录

一、创建Certificates

二、制作p12证书

三、创建APPID

四、创建描述文件Profiles

五、添加调试设备

一、创建Certificates

1、在苹果开发者后台点击右上角【Account】进入以下界面,然后点击【Certificates,Identifiers&Profiles】

2、进入以下界面后点击【Createacertificate】

3、然后选择证书类型,AppleDevelopment(开发者证书),AppleDistribution(发布证书),这里选择开发证书,选中【AppleDevelopment】,点击【Continue】继续

4、接着进入以下界面,这里让选择一个请求证书文件,需要在钥匙串中创建一个该文件

5、打开钥匙串【command+空格】——【输入“钥匙串”回车】——选择【从证书颁发机构请求证书】

6、打开证书助理,输入开发者后台的登录邮箱,选择存储到磁盘,然后在弹出的文件位置中选择存储

7、接着继续第四步,选择请求证书,点击继续进入以下界面,开发者证书创建完成

8、点击【7】界面中的【Download】,保存证书到本机

9、双击证书安装后,即可在钥匙串中看到刚安装好的开发证书

以上就是证书创建全过程,发布证书创建步骤一样,不同的是步骤【3】中的证书类型为AppleDistribution

二、制作p12证书

1、在钥匙串界面中,选中安装好的开发者证书,【右键】选择导出

2、在弹出的界面中选择保存位置,然后点击【存储】

3、在接下来的弹窗中填写p12文件的安装密码(后面他人安装该p12文件时需要输入这个密码,重要)

4、继续上面的步骤,这里需要输入电脑的开机密码,p12开发者证书到这里即制作完成。

以上就是p12开发证书制作全过程,p12发布证书制作步骤一样。

三、创建APPID

1、在【Certificates,Identifiers&Profiles】选择【Identifiers】,然后点击【Identifiers+】创建AppId 

2、在接下来的界面中选择【App IDs】

3、选择【App】,点击【Continue】继续

4、在接下来的界面填写描述信息(英文名称之类的)、BundleID(即应用包名),填写完点击【Continue】继续

5、确认信息无误,点击【Register】注册

以上就是APPID的创建过程

四、创建描述文件Profiles

1、在【Certificates,Identifiers&Profiles】选择【Profiles】,点击【Profiles+】

2、在接下来的界面中选择【iOSAppDevelopment】(这里创建的是开发描述文件,如果创建发布描述文件,选择AppStore),点击【Continue】继续

3、在该界面中选择描述文件要包含的应用,点击【Continue】继续

4、在该界面中选择描述文件要包含的证书,开发描述文件选择开发证书,点击【Continue】继续

5、在该界面中选择描述文件要包含的调试设备,点击【Continue】继续

6、填写描述文件名称,点击【Generate】创建描述文件

7、描述文件创建完成,点击【Download】下载描述文件到本地

以上就是描述文件的创建过程,如果要和他人合作开发,将描述文件和p12文件一起发给对方安装即可,例子中创建的为开发描述文件和证书,如果要发布,还需要创建发布描述文件和发布p12证书。

五、添加调试设备

1、在【Certificates,Identifiers&Profiles】选择【Devices】,点击【Devices+】

2、在该界面填写设备名称和设备UUID,点击【Continue】继续

3、确认界面,点击【Register】注册设备号

4、注册完成

以上就是添加设备的全部步骤,提示:在创建描述文件的时候,务必把所需要调试的设备勾选上

PKI证书生成流程

Android微信新版全自动抢红包助手

兔子帝:这个能不能用啊,感觉不太行

在自己的项目里调用百度接口,实现百度搜索

哈喽沃德程序猿:同,不能用

Android微信新版全自动抢红包助手

qq2064676101:获取不到微信textview是咋回事?

u盘数据损坏怎么恢复?

yufengov:优盘先别格式化,用skyRecy找回里面的资料。

关于排行榜的算法经验谈

hao666hong:图片看不到

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇