怎样用电脑做网站四川网站营销seo什么价格
怎样用电脑做网站,四川网站营销seo什么价格,个人网站视频建设,河南网站建设服务公司文中首先解释了加密解密的一些基础知识和概念#xff0c;然后通过一个加密通信过程的例子说明了加密算法的作用#xff0c;以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释#xff0c;并讨论一下windows中数字证书的管理#xff0c;最后演示使用makecert生成…文中首先解释了加密解密的一些基础知识和概念然后通过一个加密通信过程的例子说明了加密算法的作用以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释并讨论一下windows中数字证书的管理最后演示使用makecert生成数字证书。如果发现文中有错误的地方或者有什么地方说得不够清楚欢迎指出 1、基础知识 这部分内容主要解释一些概念和术语最好是先理解这部分内容。
1.1、公钥密码体制(public-key cryptography)
公钥密码体制分为三个部分公钥、私钥、加密解密算法它的加密解密过程如下 加密通过加密算法和公钥对内容(或者说明文)进行加密得到密文。加密过程需要用到公钥。 解密通过解密算法和私钥对密文进行解密得到明文。解密过程需要用到解密算法和私钥。注意由公钥加密的内容只能由私钥进行解密也就是说由公钥加密的内容如果不知道私钥是无法解密的。
公钥密码体制的公钥和算法都是公开的(这是为什么叫公钥密码体制的原因)私钥是保密的。大家都以使用公钥进行加密但是只有私钥的持有者才能解密。在实际的使用中有需要的人会生成一对公钥和私钥把公钥发布出去给别人使用自己保留私钥。 1.2、对称加密算法(symmetric key algorithms)
在对称加密算法中加密使用的密钥和解密使用的密钥是相同的。也就是说加密和解密都是使用的同一个密钥。因此对称加密算法要保证安全性的话密钥要做好保密只能让使用的人知道不能对外公开。这个和上面的公钥密码体制有所不同公钥密码体制中加密是用公钥解密使用私钥而对称加密算法中加密和解密都是使用同一个密钥不区分公钥和私钥。 // 密钥一般就是一个字符串或数字在加密或者解密时传递给加密/解密算法。前面在公钥密码体制中说到的公钥、私钥就是密钥公钥是加密使用的密钥私钥是解密使用的密钥。 1.3、非对称加密算法(asymmetric key algorithms)
在非对称加密算法中加密使用的密钥和解密使用的密钥是不相同的。前面所说的公钥密码体制就是一种非对称加密算法他的公钥和是私钥是不能相同的也就是说加密使用的密钥和解密使用的密钥不同因此它是一个非对称加密算法。 1.4、RSA简介
RSA是一种公钥密码体制现在使用得很广泛。如果对RSA本身有兴趣的后面看我有没有时间写个RSA的具体介绍。
RSA密码体制是一种公钥密码体制公钥公开私钥保密它的加密解密算法是公开的。 由公钥加密的内容可以并且只能由私钥进行解密并且由私钥加密的内容可以并且只能由公钥进行解密。也就是说RSA的这一对公钥、私钥都可以用来加密和解密并且一方加密的内容可以由并且只能由对方进行解密。 1.5、签名和加密
我们说加密是指对某个内容加密加密后的内容还可以通过解密进行还原。 比如我们把一封邮件进行加密加密后的内容在网络上进行传输接收者在收到后通过解密可以还原邮件的真实内容。
这里主要解释一下签名签名就是在信息的后面再加上一段内容可以证明信息没有被修改过怎么样可以达到这个效果呢一般是对信息做一个hash计算得到一个hash值注意这个过程是不可逆的也就是说无法通过hash值得出原来的信息内容。在把信息发送出去时把这个hash值加密后做为一个签名和信息一起发出去。 接收方在收到信息后会重新计算信息的hash值并和信息所附带的hash值(解密后)进行对比如果一致就说明信息的内容没有被修改过因为这里hash计算可以保证不同的内容一定会得到不同的hash值所以只要内容一被修改根据信息内容计算的hash值就会变化。当然不怀好意的人也可以修改信息内容的同时也修改hash值从而让它们可以相匹配为了防止这种情况hash值一般都会加密后(也就是签名)再和信息一起发送以保证这个hash值不被修改。至于如何让别人可以解密这个签名这个过程涉及到数字证书等概念我们后面在说到数字证书时再详细说明这里您先只需先理解签名的这个概念。 2、一个加密通信过程的演化 我们来看一个例子现在假设服务器和客户要在网络上通信并且他们打算使用RSA(参看前面的RSA简介)来对通信进行加密以保证谈话内容的安全。由于是使用RSA这种公钥密码体制服务器需要对外发布公钥(算法不需要公布RSA的算法大家都知道)自己留着私钥。客户通过某些途径拿到了服务器发布的公钥客户并不知道私钥。客户具体是通过什么途径获取公钥的我们后面再来说明下面看一下双方如何进行保密的通信 2.1 第一回合
客户-服务器你好
服务器-客户你好我是服务器
客户-服务器
因为消息是在网络上传输的有人可以冒充自己是服务器来向客户发送信息。例如上面的消息可以被黑客截获如下
客户-服务器你好
服务器-客户你好我是服务器
客户-黑客你好 // 黑客在客户和服务器之间的某个路由器上截获客户发给服务器的信息然后自己冒充服务器
黑客-客户你好我是服务器
因此客户在接到消息后并不能肯定这个消息就是由服务器发出的某些黑客也可以冒充服务器发出这个消息。如何确定信息是由服务器发过来的呢有一个解决方法因为只有服务器有私钥所以如果只要能够确认对方有私钥那么对方就是服务器。因此通信过程可以改进为如下 2.2 第二回合
客户-服务器你好
服务器-客户你好我是服务器
客户-服务器向我证明你就是服务器
服务器-客户你好我是服务器 {你好我是服务器}[私钥|RSA] // 注意这里约定一下{} 表示RSA加密后的内容[ | ]表示用什么密钥和算法进行加密后面的示例中都用这种表示方式例如上面的 {你好我是服务器}[私钥|RSA] 就表示用私钥对你好我是服务器进行加密后的结果。
为了向客户证明自己是服务器 服务器把一个字符串用自己的私钥加密把明文和加密后的密文一起发给客户。对于这里的例子来说就是把字符串 你好我是服务器和这个字符串用私钥加密后的内容 {你好我是服务器}[私钥|RSA] 发给客户。
客户收到信息后她用自己持有的公钥解密密文和明文进行对比如果一致说明信息的确是由服务器发过来的。也就是说客户把 {你好我是服务器}[私钥|RSA] 这个内容用公钥进行解密然后和你好我是服务器对比。因为由服务器用私钥加密后的内容由并且只能由公钥进行解密私钥只有服务器持有所以如果解密出来的内容是能够对得上的那说明信息一定是从服务器发过来的。
假设黑客想冒充服务器
黑客-客户你好我是服务器
客户-黑客向我证明你就是服务器
黑客-客户你好我是服务器 {你好我是服务器}[|RSA] //这里黑客无法冒充因为他不知道私钥无法用私钥加密某个字符串后发送给客户去验证。
客户-黑客
由于黑客没有服务器的私钥因此它发送过去的内容客户是无法通过服务器的公钥解密的因此可以认定对方是个冒牌货
到这里为止客户就可以确认服务器的身份了可以放心和服务器进行通信但是这里有一个问题通信的内容在网络上还是无法保密。为什么无法保密呢通信过程不是可以用公钥、私钥加密吗其实用RSA的私钥和公钥是不行的我们来具体分析下过程看下面的演示 2.3 第三回合
客户-服务器你好
服务器-客户你好我是服务器
客户-服务器向我证明你就是服务器
服务器-客户你好我是服务器 {你好我是服务器}[私钥|RSA]
客户-服务器{我的帐号是aaa密码是123把我的余额的信息发给我看看}[公钥|RSA]
服务器-客户{你的余额是100元}[私钥|RSA]
注意上面的的信息 {你的余额是100元}[私钥]这个是服务器用私钥加密后的内容但是我们之前说了公钥是发布出去的因此所有的人都知道公钥所以除了客户其它的人也可以用公钥对{你的余额是100元}[私钥]进行解密。所以如果服务器用私钥加密发给客户这个信息是无法保密的因为只要有公钥就可以解密这内容。然而服务器也不能用公钥对发送的内容进行加密因为客户没有私钥发送个客户也解密不了。
这样问题就又来了那又如何解决呢在实际的应用过程一般是通过引入对称加密来解决这个问题看下面的演示 2.4 第四回合
客户-服务器你好
服务器-客户你好我是服务器
客户-服务器向我证明你就是服务器
服务器-客户你好我是服务器 {你好我是服务器}[私钥|RSA]
客户-服务器{我们后面的通信过程用对称加密来进行这里是对称加密算法和密钥}[公钥|RSA] //蓝色字体的部分是对称加密的算法和密钥的具体内容客户把它们发送给服务器。
服务器-客户{OK收到}[密钥|对称加密算法]
客户-服务器{我的帐号是aaa密码是123把我的余额的信息发给我看看}[密钥|对称加密算法]
服务器-客户{你的余额是100元}[密钥|对称加密算法]
在上面的通信过程中客户在确认了服务器的身份后客户自己选择一个对称加密算法和一个密钥把这个对称加密算法和密钥一起用公钥加密后发送给服务器。注意由于对称加密算法和密钥是用公钥加密的就算这个加密后的内容被黑客截获了由于没有私钥黑客也无从知道对称加密算法和密钥的内容。
由于是用公钥加密的只有私钥能够解密这样就可以保证只有服务器可以知道对称加密算法和密钥而其它人不可能知道(这个对称加密算法和密钥是客户自己选择的所以客户自己当然知道如何解密加密)。这样服务器和客户就可以用对称加密算法和密钥来加密通信的内容了。 总结一下RSA加密算法在这个通信过程中所起到的作用主要有两个 因为私钥只有服务器拥有因此客户可以通过判断对方是否有私钥来判断对方是否是服务器。 客户端通过RSA的掩护安全的和服务器商量好一个对称加密算法和密钥来保证后面通信过程内容的安全。
如果这里您理解了为什么不用RSA去加密通信过程而是要再确定一个对称加密算法来保证通信过程的安全那么就说明前面的内容您已经理解了。(如果不清楚再看下2.3和2.4如果还是不清楚那应该是我们说清楚您可以留言提问。)
到这里客户就可以确认服务器的身份并且双方的通信内容可以进行加密其他人就算截获了通信内容也无法解密。的确好像通信的过程是比较安全了。 但是这里还留有一个问题在最开始我们就说过服务器要对外发布公钥那服务器如何把公钥发送给客户呢我们第一反应可能会想到以下的两个方法
a)把公钥放到互联网的某个地方的一个下载地址事先给客户去下载。
b)每次和客户开始通信时服务器把公钥发给客户。
但是这个两个方法都有一定的问题
对于a)方法客户无法确定这个下载地址是不是服务器发布的你凭什么就相信这个地址下载的东西就是服务器发布的而不是别人伪造的呢万一下载到一个假的怎么办另外要所有的客户都在通信前事先去下载公钥也很不现实。
对于b)方法也有问题因为任何人都可以自己生成一对公钥和私钥他只要向客户发送他自己的私钥就可以冒充服务器了。示意如下
客户-黑客你好 //黑客截获客户发给服务器的消息
黑客-客户你好我是服务器这个是我的公钥 //黑客自己生成一对公钥和私钥把公钥发给客户自己保留私钥
客户-黑客向我证明你就是服务器
黑客-客户你好我是服务器 {你好我是服务器}[黑客自己的私钥|RSA] //客户收到黑客用私钥加密的信息后是可以用黑客发给自己的公钥解密的从而会误认为黑客是服务器
因此黑客只需要自己生成一对公钥和私钥然后把公钥发送给客户自己保留私钥这样由于客户可以用黑客的公钥解密黑客的私钥加密的内容客户就会相信黑客是服务器从而导致了安全问题。这里问题的根源就在于大家都可以生成公钥、私钥对无法确认公钥对到底是谁的。 如果能够确定公钥到底是谁的就不会有这个问题了。例如如果收到黑客冒充服务器发过来的公钥经过某种检查如果能够发现这个公钥不是服务器的就好了。
为了解决这个问题数字证书出现了它可以解决我们上面的问题。先大概看下什么是数字证书一个证书包含下面的具体内容 证书的发布机构 证书的有效期 公钥 证书所有者Subject 签名所使用的算法 指纹以及指纹算法
证书的内容的详细解释会在后面详细解释这里先只需要搞清楚一点数字证书可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的或者证书可以用来确认对方的身份。也就是说我们拿到一个数字证书我们可以判断出这个数字证书到底是谁的。至于是如何判断的后面会在详细讨论数字证书时详细解释。现在把前面的通信过程使用数字证书修改为如下 2.5 第五回合
客户-服务器你好
服务器-客户你好我是服务器这里是我的数字证书 //这里用证书代替了公钥
客户-服务器向我证明你就是服务器
服务器-客户你好我是服务器 {你好我是服务器}[私钥|RSA]
注意上面第二次通信服务器把自己的证书发给了客户而不是发送公钥。客户可以根据证书校验这个证书到底是不是服务器的也就是能校验这个证书的所有者是不是服务器从而确认这个证书中的公钥的确是服务器的。后面的过程和以前是一样客户让服务器证明自己的身份服务器用私钥加密一段内容连同明文一起发给客户客户把加密内容用数字证书中的公钥解密后和明文对比如果一致那么对方就确实是服务器然后双方协商一个对称加密来保证通信过程的安全。到这里整个过程就完整了我们回顾一下 2.6 完整过程
step1 客户向服务端发送一个通信请求
客户-服务器你好 step2 服务器向客户发送自己的数字证书。证书中有一个公钥用来加密信息私钥由服务器持有
服务器-客户你好我是服务器这里是我的数字证书 step3 客户收到服务器的证书后它会去验证这个数字证书到底是不是服务器的数字证书有没有什么问题数字证书如果检查没有问题就说明数字证书中的公钥确实是服务器的。检查数字证书后客户会发送一个随机的字符串给服务器用私钥去加密服务器把加密的结果返回给客户客户用公钥解密这个返回结果如果解密结果与之前生成的随机字符串一致那说明对方确实是私钥的持有者或者说对方确实是服务器。
客户-服务器向我证明你就是服务器这是一个随机字符串 //前面的例子中为了方便解释用的是你好等内容实际情况下一般是随机生成的一个字符串。
服务器-客户{一个随机字符串}[私钥|RSA] step4 验证服务器的身份后客户生成一个对称加密算法和密钥用于后面的通信的加密和解密。这个对称加密算法和密钥客户会用公钥加密后发送给服务器别人截获了也没用因为只有服务器手中有可以解密的私钥。这样后面服务器和客户就都可以用对称加密算法来加密和解密通信内容了。
服务器-客户{OK已经收到你发来的对称加密算法和密钥有什么可以帮到你的}[密钥|对称加密算法]
客户-服务器{我的帐号是aaa密码是123把我的余额的信息发给我看看}[密钥|对称加密算法]
服务器-客户{你好你的余额是100元}[密钥|对称加密算法]
…… //继续其它的通信 2.7 其它问题
上面的过程已经十分接近HTTPS的真实通信过程了完全可以按照这个过程去理解HTTPS的工作原理。但是我为了方便解释上面有些细节没有说到有兴趣的人可以看下这部分的内容。可以跳过不看无关紧要。 【问题1】
上面的通信过程中说到在检查完证书后客户发送一个随机的字符串给服务器去用私钥加密以便判断对方是否真的持有私钥。但是有一个问题黑客也可以发送一个字符串给服务器去加密并且得到加密后的内容这样对于服务器来说是不安全的因为黑客可以发送一些简单的有规律的字符串给服务器加密从而寻找加密的规律有可能威胁到私钥的安全。所以说服务器随随便便用私钥去加密一个来路不明的字符串并把结果发送给对方是不安全的。
〖解决方法〗
每次收到客户发来的要加密的的字符串时服务器并不是真正的加密这个字符串本身而是把这个字符串进行一个hash计算加密这个字符串的hash值(不加密原来的字符串)后发送给客户客户收到后解密这个hash值并自己计算字符串的hash值然后进行对比是否一致。也就是说服务器不直接加密收到的字符串而是加密这个字符串的一个hash值这样就避免了加密那些有规律的字符串从而降低被破解的机率。客户自己发送的字符串因此它自己可以计算字符串的hash值然后再把服务器发送过来的加密的hash值和自己计算的进行对比同样也能确定对方是否是服务器。 【问题2】
在双方的通信过程中黑客可以截获发送的加密了的内容虽然他无法解密这个内容但是他可以捣乱例如把信息原封不动的发送多次扰乱通信过程。
〖解决方法〗
可以给通信的内容加上一个序号或者一个随机的值如果客户或者服务器接收到的信息中有之前出现过的序号或者随机值那么说明有人在通信过程中重发信息内容进行捣乱双方会立刻停止通信。有人可能会问如果有人一直这么捣乱怎么办那不是无法通信了 答案是的确是这样的例如有人控制了你连接互联网的路由器他的确可以针对你。但是一些重要的应用例如军队或者政府的内部网络它们都不使用我们平时使用的公网因此一般人不会破坏到他们的通信。 【问题3】
在双方的通信过程中黑客除了简单的重复发送截获的消息之外还可以修改截获后的密文修改后再发送因为修改的是密文虽然不能完全控制消息解密后的内容但是仍然会破坏解密后的密文。因此发送过程如果黑客对密文进行了修改客户和服务器是无法判断密文是否被修改的。虽然不一定能达到目的但是黑客可以一直这样碰碰运气。
〖解决方法〗
在每次发送信息时先对信息的内容进行一个hash计算得出一个hash值将信息的内容和这个hash值一起加密后发送。接收方在收到后进行解密得到明文的内容和hash值然后接收方再自己对收到信息内容做一次hash计算与收到的hash值进行对比看是否匹配如果匹配就说明信息在传输过程中没有被修改过。如果不匹配说明中途有人故意对加密数据进行了修改立刻中断通话过程后做其它处理。 3. 证书的构成和原理
3.1 证书的构成和原理
之前已经大概说了一个证书由什么构成但是没有仔细进行介绍这里对证书的内容做一个详细的介绍。先看下一个证书到底是个什么东西在windows下查看一个证书时界面是这样的我们主要关注一下Details Tab页其中的内容比较长我滚动内容后后抓了三个图把完整的信息显示出来 里面的内容比较多——Version、Serial number、Signature algorithm 等等挑几个重要的解释一下。 ◆Issuer (证书的发布机构)
指出是什么机构发布的这个证书也就是指明这个证书是哪个公司创建的(只是创建证书不是指证书的使用者)。对于上面的这个证书来说就是指SecureTrust CA这个机构。 ◆Valid from , Valid to (证书的有效期)
也就是证书的有效时间或者说证书的使用期限。 过了有效期限证书就会作废不能使用了。 ◆Public key (公钥)
这个我们在前面介绍公钥密码体制时介绍过公钥是用来对消息进行加密的第2章的例子中经常用到的。这个数字证书的公钥是2048位的它的值可以在图的中间的那个对话框中看得到是很长的一串数字。 ◆Subject (主题)
这个证书是发布给谁的或者说证书的所有者一般是某个人或者某个公司名称、机构的名称、公司网站的网址等。 对于这里的证书来说证书的所有者是Trustwave这个公司。 ◆Signature algorithm (签名所使用的算法)
就是指的这个数字证书的数字签名所使用的加密算法这样就可以使用证书发布机构的证书里面的公钥根据这个算法对指纹进行解密。指纹的加密结果就是数字签名(第1.5节中解释过数字签名)。 ◆Thumbprint, Thumbprint algorithm (指纹以及指纹算法)
这个是用来保证证书的完整性的也就是说确保证书没有被修改过这东西的作用和2.7中说到的第3个问题类似。 其原理就是在发布证书时发布者根据指纹算法(一个hash算法)计算整个证书的hash值(指纹)并和证书放在一起使用者在打开证书时自己也根据指纹算法计算一下证书的hash值(指纹)如果和刚开始的值对得上就说明证书没有被修改过因为证书的内容被修改后根据证书的内容计算的出的hash值(指纹)是会变化的。 注意这个指纹会使用SecureTrust CA这个证书机构的私钥用签名算法(Signature algorithm)加密后和证书放在一起。 注意为了保证安全在证书的发布机构发布证书时证书的指纹和指纹算法都会加密后再和证书放到一起发布以防有人修改指纹后伪造相应的数字证书。这里问题又来了证书的指纹和指纹算法用什么加密呢他们是用证书发布机构的私钥进行加密的。可以用证书发布机构的公钥对指纹和指纹算法解密也就是说证书发布机构除了给别人发布证书外他自己本身也有自己的证书。证书发布机构的证书是哪里来的呢这个证书发布机构的数字证书(一般由他自己生成)在我们的操作系统刚安装好时(例如windows xp等操作系统)这些证书发布机构的数字证书就已经被微软(或者其它操作系统的开发机构)安装在操作系统中了微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构把这些证书发布机构的证书默认就安装在操作系统里面了并且设置为操作系统信任的数字证书。这些证书发布机构自己持有与他自己的数字证书对应的私钥他会用这个私钥加密所有他发布的证书的指纹作为数字签名。 3.2 如何向证书的发布机构去申请证书
举个例子方便大家理解假设我们公司ABC Company花了1000块钱向一个证书发布机构SecureTrust CA为我们自己的公司ABC Company申请了一张证书注意这个证书发布机构SecureTrust CA是一个大家公认并被一些权威机构接受的证书发布机构我们的操作系统里面已经安装了SecureTrust CA的证书。SecureTrust CA在给我们发布证书时把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式写到证书里面然后用一个指纹算法计算出这些数字证书内容的一个指纹并把指纹和指纹算法用自己的私钥进行加密然后和证书的内容一起发布同时SecureTrust CA还会给一个我们公司ABC Company的私钥给到我们。我们花了1000块钱买的这个证书的内容如下
×××××××××××××××证书内容开始×××××××××××××××××
Issuer : SecureTrust CA
Subject : ABC Company
Valid from 某个日期
Valid to 某个日期
Public Key : 一串很长的数字
…… 其它的一些证书内容……
{证书的指纹和计算指纹所使用的指纹算法}[SecureTrust CA的私钥|RSA] //这个就是SecureTrust CA对这个证书的一个数字签名表示这个证书确实是他发布的有什么问题他会负责(收了我们1000块出了问题肯定要负责任的)
×××××××××××××××证书内容结束××××××××××××××××× // 记不记得前面的约定{} 表示RSA加密后的内容[ | ]表示用什么密钥和算法进行加密 我们ABC Company申请到这个证书后我们把证书投入使用我们在通信过程开始时会把证书发给对方对方如何检查这个证书的确是合法的并且是我们ABC Company公司的证书呢首先应用程序(对方通信用的程序例如IE、OUTLook等)读取证书中的Issuer(发布机构)为SecureTrust CA 然后会在操作系统中受信任的发布机构的证书中去找SecureTrust CA的证书如果找不到那说明证书的发布机构是个水货发布机构证书可能有问题程序会给出一个错误信息。 如果在系统中找到了SecureTrust CA的证书那么应用程序就会从证书中取出SecureTrust CA的公钥然后对我们ABC Company公司的证书里面的指纹和指纹算法用这个公钥进行解密然后使用这个指纹算法计算ABC Company证书的指纹将这个计算的指纹与放在证书中的指纹对比如果一致说明ABC Company的证书肯定没有被修改过并且证书是SecureTrust CA 发布的证书中的公钥肯定是ABC Company的。对方然后就可以放心的使用这个公钥和我们ABC Company进行通信了。
★这个部分非常重要一定要理解您可以重新回顾一下之前的两章1、基础知识和 2、一个加密通信过程的演化然后再来理解这部分的内容。如果您把这节的内容看了几遍还没有搞懂证书的工作原理您可以留言指出我没有说清楚的内容我好方便进行修正。 3.3 证书的发布机构
前面已经初步介绍了一下证书发布机构这里再深入讨论一下。
其实所有的公司都可以发布证书我们自己也可以去注册一家公司来专门给别人发布证书。但是很明显我们自己的专门发布证书的公司是不会被那些国际上的权威机构认可的人家怎么知道你是不是个狗屁皮包公司因此微软在它的操作系统中并不会信任我们这个证书发布机构当应用程序在检查证书的合法信的时候一看证书的发布机构并不是操作系统所信任的发布机构就会抛出错误信息。也就是说windows操作系统中不会预先安装好我们这个证书发布机构的证书不信任我们这个发布机构。 不受信任的证书发布机构的危害
为什么一个证书发布机构受不受信任这么重要我们举个例子。假设我们开了一个狗屁公司来为别人发布证书并且我和微软有一腿微软在他们的操作系统中把我设置为了受信任的证书发布机构。现在如果有个小公司叫Wicrosoft 花了10块钱让我为他们公司申请了一个证书并且公司慢慢壮大证书的应用范围也越来越广。然后有个奸商的公司JS Company想冒充Wicrosoft于是给了我10000让我为他们颁布一个证书但是证书的名字(Subject)要写Wicrosoft假如我为了这10000真的把证书给了他们那么他们以后就可以使用这个证书来冒充Wicrosoft了。
如果是一个优秀的证书发布机构比如你要向他申请一个名字叫Wicrosoft的证书它会让你提供很多资料证明你确实可以代表Wicrosoft这个公司也就是说他回去核实你的身份。证书发布机构是要为他发布出的证书负法律责任的。 到这里你可能会想TMD那我们自己就不能发布证书吗就一定要花钱去申请当然不是我们自己也可以成立证书发布机构但是需要通过一些安全认证等等只是有点麻烦。另外如果数字证书只是要在公司内部使用公司可以自己给自己生成一个证书在公司的所有机器上把这个证书设置为操作系统信任的证书发布机构的证书(这句话仔细看清楚有点绕口)这样以后公司发布的证书在公司内部的所有机器上就可以通过验证了(在发布证书时把这些证书的Issuer(发布机构)设置为我们自己的证书发布机构的证书的Subject(主题)就可以了)。但是这只限于内部应用因为只有我们公司自己的机器上设置了信任我们自己这个所谓的证书发布机构而其它机器上并没有事先信任我们这个证书发布机构所以在其它机器上我们发布的证书就无法通过安全验证。 4. 在windows中对数字证书进行管理
4.1 查看、删除、安装 数字证书
我们在上一章中说到了我们的操作系统中会预先安装好一些证书发布机构的证书我们看下在windows中如何找到这些证书步骤如下
1)开始菜单-运行输入mmc回车
2)在打开的窗口中选择 File- Add/Remove Snap-in…
3)然后在弹出的对话框的 Standalone Tab页里面点击 Add… 按钮
4)在弹出的对对话框中选择 certificates 后点击 Add 按钮
具体的步骤如下图所示 上面的步骤结束后会又弹出一个对话框里面有三个单选按钮如下 My user account Service account Computer account
可以选择第一或者第三个选项用来查看当前用户的证书或整个计算里面安装的证书。我们这里就默认选择第一个平时一般安装证书的时候都会给所有用户安装所以选择第一个和第三个选项看到的证书会差不多。我们在左边的导航树中选中受信任的证书发布机构(Trusted Root Certificate Authorities)然后点击下面的证书(Certificates)在右边的区域中就可以看到所有的受信任的证书发布机构的证书。 注意上面的图片中右边我们选中的这个证书发布机构SecureTrust CA我们前面在第3章3.2节中举例子的时候就是去向这个证书发布机构申请的证书由于我们申请的证书是这个机构发布的所以应用程序在检查我们的证书的发布机构时(会检查我们证书的签名确认是该机构发布的证书)就会发现是可以信任的证书发布机构从而就会相信我们证书的真实性。
删除数字证书很简单直接在右边的列表中右键然后删除就可以了。
数字证书的安装也比较简单直接双击数字证书文件会打开数字证书对话框下面会有一个Install Certificate按钮点击后就可以根据向导进行安装如下图所示 这个证书是我自己生成的测试证书在证书的导入向导里面它会让你选择导入到什么位置如果是一个我们自己信任的证书发布机构自己的证书只要导入到Certificate Authorities就可以了。Trusted Root Certificate Authorities, Intermediate Certification Authorities, Third-Party Root Certification Authorities 都是可以的他们只是对证书的发布机构做了一个分类还有一些其它的证书类型例如Personal(个人证书)等等具体就不介绍了。安装的时候一般来说可以用默认的选择项一直下一步到底。 4.2 如何自己创建证书
每个证书发布机构都有自己的用来创建证书的工具当然具体他们怎么去创建一个证书的我也不太清楚不同类型的证书都有一定的格式和规范我没有仔细去研究过这部分内容。 微软为我们提供了一个用来创建证书的工具makecert.exe在安装Visual Studio的时候会安装上。如果没有安装也无所谓可以上网去下一个搜索makecert就可以了。可以直接从我的博客下载这是链接。
向一些正规的证书发布机构申请证书一般是要收费的(因为别人要花时间检查你的身份确认有没有同名的证书等等)这里我们看下如何自己创建一个证书为后面在IIS中配置Https做准备。
我们用到的是makecert这个工具微软有很详细的使用帮助我这里只做一个简单的解释详细的各种参数和使用方法请查看MSDN的makecert的帮助。但是里面有些参数说得不够清楚而且还有遗漏的可以参看我后面的解释作为一个补充。 先看下makecert最简单的使用方式
makecert.exe test.cer
上面的命令会在makecert.exe所在的目录生成一个证书文件test.cer的数字证书文件。可以双击证书打开看看证书的内容如下 证书的发布机构是Root Agency证书的主题(证书发布给谁)是Joes-Software-Emporium因为我们没有指定把证书发布给谁makecert自己给我们随便生成了一个公司的名字。另外还指定了公钥、签名算法(用来解密签名)、指纹和指纹算法等。
注意因为这个证书是由微软的工具生成的严格来说它没什么发布机构所以微软虚拟了一个叫做Root Agency的发布机构默认情况下windows里面安装了这个所谓的证书发布机构的证书但是这证书默认情况下不是受信任的原因很简单这样做大家都可以用makecert来制作合法的数字证书了。如果我们自己硬是要也可以把它设置为受信任的。 下面我们看下其它的参数比如我们要给网站 www.jefferysun.com 生成一个证书MyCA.cer假设我们把makecert.exe放在C盘下命令行如下
makecert -r -pe -n CN10.30.146.206 -b 01/01/2000 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp Microsoft RSA SChannel Cryptographic Provider -sy 12
C:\ makecert.exe –pe -r –n CNwww.jefferysun.com -ss my -sr LocalMachine -a sha1 -len 2048 MyCA.cer
解释一下makecert的常用参数的意思 -n 指定主题的名字这个是有固定的格式的 CN主题名字 CN应该是Certificate Name的缩写。我这里的主题的名字就是我们的IIS所在机器的IP。这里可以指定一些主题的其它附加信息例如 O *** 表示组织信息等等。 -r 创建自签署证书意思就是说在生成证书时将证书的发布机构设置为自己。 -pe 将所生成的私钥标记为可导出。注意服务器发送证书给客户端的时候客户端只能从证书里面获取公钥私钥是无法获取的。如果我们指定了这个参数证书在安装在机器上后我们还可以从证书中导出私钥默认情况下是不能导出私钥的。正规的途径发布的证书是不可能让你导出私钥的。 -b –e 证书的有效期 -ss 证书的存储名称就是windows证书存储区的目录名如果不存在在的话就创建一个。 -sr 证书的存储位置只有currentuser默认值或 localmachine两个值。 -sv 指定保存私钥的文件文件里面除了包含私钥外其实也包含了证书。这个文件是需要保密的这个文件在服务端配置时是需要用到的。 这个CN10.30.146.206要与自己的服务器相对应要不然在配置HTTPS的时候会出现错误 -a 指定签名算法必须是md5或rsa1。(还记得签名算法的作用不可以看一下3章的第1节中关于签名算法的介绍) -in 指定证书发布机构的名称 -len 这个参数在中文的帮助文档中好像没有提到但是这个其实很重要用于指定公钥的位数越大越安全默认值是1024推荐2048。我试了下这个不为1024的倍数也是可以的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89676.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!