<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Certificate on Shell&#39;s Home</title>
		<link>//blog.shell909090.org/tags/certificate/</link>
		<description>Recent content in Certificate on Shell&#39;s Home</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
			<copyright>CC-BY-SA4.0</copyright>
		
		
			<lastBuildDate>Wed, 13 Apr 2011 15:54:41 +0800</lastBuildDate>
		
			<atom:link href="//blog.shell909090.org/tags/certificate/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>论不同系统和客户端的证书管理</title>
				<link>//blog.shell909090.org/blog/archives/1773/</link>
				<pubDate>Wed, 13 Apr 2011 15:54:41 +0800</pubDate>
				<guid>//blog.shell909090.org/blog/archives/1773/</guid>
				<description>&lt;p&gt;上面刚说完x509证书链系统，现在我们说说各种系统和客户端下的证书管理吧。理论上说，系统只要保留一份根证书系统，其余的会自动进行计算。但是杯具的是，不同系统的不同应用，使用的是不同的数据库。这导致你的根证书导入之路漫漫而修远。&lt;/p&gt;&#xA;&lt;p&gt;windows系统：&lt;/p&gt;&#xA;&lt;p&gt;1.系统证书管理&lt;/p&gt;&#xA;&lt;p&gt;在运行中输入certmgr.msc，就可以看到证书管理系统了。根证书管理在“受信任的根证书颁发机构-&amp;gt;证书”下面。对证书文件进行查看，导入，然后导入到这个区域，就可以变成根证书了。要吊销一份证书，删除是不行的，因为会自动加回来。加入“不受信任的证书”好像也无效。我找到的比较实用的方法是右击看属性，“停用这个证书的所有目地”。再试试看？证书应当无效了。&lt;/p&gt;&#xA;&lt;p&gt;2.firefox&lt;/p&gt;&#xA;&lt;p&gt;火狐的证书系统是独立于系统证书的，因此在windows中做的修改对firefox无效。需要到“选项-&amp;gt;高级-&amp;gt;加密-&amp;gt;查看证书”中（windows下在工具菜单下），在“证书机构”选项卡，导入证书，而后启用所有用途，让证书生效。如果要吊销，跑到同一个地方，删除证书，或者编辑，取消所有用途。需要注意的是，当你删除证书后，再次查看证书列表时，证书会回来。但是此时编辑证书，可以看到，所有用途都被取消了。&lt;/p&gt;&#xA;&lt;p&gt;3.chrome&lt;/p&gt;&#xA;&lt;p&gt;chrome在windows下使用系统证书，因此不要用chrome自身的证书管理系统，直接修改系统证书就可以。&lt;/p&gt;&#xA;&lt;p&gt;linux系统(debian)：&lt;/p&gt;&#xA;&lt;p&gt;1.系统证书管理&lt;/p&gt;&#xA;&lt;p&gt;运行dpkg-reconfigure ca-certificates，会出现让你配置系统证书的界面。这是系统的证书数据库，自动配置的话好像不能添加，只能取消。你反选某个选项后，/etc/ca-certificates.conf中，对应这个选项的行在行首就会出现!。此时系统内就不再认可这份证书。因此推测，如果你需要自己加入一份证书，需要将证书添加到合适位置，编辑/etc/ca-certificates.conf，加入路径，再执行dpkg-reconfigure ca-certificates或者update-ca-certificates进行更新，此时程序会更新/etc/ssl的某些内容，证书就安装上去了。&lt;/p&gt;&#xA;&lt;p&gt;2.firefox&lt;/p&gt;&#xA;&lt;p&gt;同样是独立于系统的配置，基本操作和windows差不多，不过linux下面“选项”在“编辑”下面。&lt;/p&gt;&#xA;&lt;p&gt;3.chrome&lt;/p&gt;&#xA;&lt;p&gt;linux下面的chrome可以在“首选项-&amp;gt;高级-&amp;gt;证书管理器”中，选择“授权中心”。导入后修改权限即加入。注意需要使用禁用，而非删除对应证书，来阻止某些证书。&lt;/p&gt;&#xA;&lt;p&gt;这里面说的加入证书，基本是加入自己的证书。至于移除，基本说的是cnnic。cnnic证书有什么危害？目前没有。如果你相信中国的互联网是世界上最开放的互联网，那么下面一堆不看也罢。不过，如果你不相信中国政府颁发出的证书，还是移除的好。在系统内保留一个不受信任的根证书，可能受到证书替换钓鱼。简单来说，你访问一个安全网站的时候，这个网站的证书是如何颁发的，你留心过么？在地址栏网站logo那里右击，查看证书，再找到证书链，你就可以看到，这个证书属于谁，是谁颁发的，这样一个链条。想象一下，你在用gmail的时候，心血来潮看了看域名证书，发现颁发者是CNNIC SSL（google的颁发者是Thawte）。很明显，你访问的网站不是真的gmail，而是一个伪装的网站，将你的请求再转到gmail服务器上。这个网站没有gmail的证书，不过用CNNIC签了一个。于是你的所有请求，收到的邮件内容，发出去的内容，全部被公开了。你也不知道这个替换什么时候进行的，由于安全验证可以通过，系统也没有警告你。是不是有种看到日本恐怖片里面，贞子爬出屏幕的感觉？&lt;/p&gt;&#xA;&lt;p&gt;当然，这个是一个特例，有点危言耸听。因为对于某些国外CA，证书也是乱发的。基本只要交钱，给一份材料复印件，一样可以通过审查，得到一本CA证书。然而，这种证书通常比较容易被发现，CA也会很快吊销这些证书。如果不是这样，这些CA往往也会被各种系统加入吊销名单。不过对于蓄意产生的CA证书么，就难说的很了。附上一个用于检测CNNIC证书的网站，&lt;a href=&#34;https://www.enum.cn/&#34;&gt;https://www.enum.cn/&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;另一个风险证书则是comodo，早些时候，这个公司被黑客入侵，导致黑客给自己签发了一堆证书。虽然目前这些证书已经被吊销，不过这种安全公司让人一点信任感都没有。最好果断删除。&lt;/p&gt;</description>
			</item>
			<item>
				<title>说说x509证书链</title>
				<link>//blog.shell909090.org/blog/archives/1772/</link>
				<pubDate>Mon, 11 Apr 2011 11:03:47 +0800</pubDate>
				<guid>//blog.shell909090.org/blog/archives/1772/</guid>
				<description>&lt;p&gt;x509证书一般会用到三类文件，key，csr，crt。key是私用密钥，openssl格式，通常是rsa算法，爱咋用咋用的。csr是证书请求文件，用于申请证书。在申请的时候，必须使用自己的私钥来签署申请，还可以设定一个密钥。crt是证书文件（windows下面的csr，其实是crt），是签署人用自己的key给你签署的凭证。通常签名证书的时候都需要一个序列号，避免两个证书重复，当指明序列文件后，被签名证书会使用这个文件，并且文件会发生变化。另外一个额外说明的东西是dh参数，做openvpn的时候需要这个东西，大致是什么算法的初始参数，在下面有生成方法。&lt;/p&gt;&#xA;&lt;p&gt;key的生成方法：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;openssl genrsa -des3 -out in.key 2048&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;这样是生成rsa私钥，des3算法，openssl格式，2048位强度。ca.key是文件名。为了生成这样的密钥，需要一个至少四位的密码。可以通过以下方法去除。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;openssl rsa -in in.key -out out.key&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;输入密钥后，out.key就是没有密码的版本了。&lt;/p&gt;&#xA;&lt;p&gt;csr的生成方法：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;openssl req -new -key server.key -out server.csr&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;需要依次输入国家，地区，组织，email。最重要的是，有一个common name，可以写你的名字或者域名。如果为了https申请，这个必须和域名吻合，否则会引发浏览器警报。&lt;/p&gt;&#xA;&lt;p&gt;crt生成方法：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;openssl x509 -md5 -days 3560 -req -CA ca.crt -CAkey ca.key -CAcreateserial -CAserial ca.srl -in server.csr -out server.crt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;输入key的密钥后，完成证书生成。-CA选项指明用于签名的ca证书，-CAkey选项指明用于签名的密钥。-CAserial指明序列号文件，而-CAcreateserial指明文件不存在时自动生成。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;openssl req -new -x509 -days 3650 -key ca.key -out ca.crt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;这个是用于生成自签名证书的。&lt;/p&gt;&#xA;&lt;p&gt;dh参数生成方法：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;openssl dhparam -out dh1024.pem&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;1024是位数，一般1024已经够了。&lt;/p&gt;&#xA;&lt;p&gt;x509的证书链是这样的。crt上有证书持有人的信息，持有人的公钥，签署者的签名。当你安装了一个证书后，就信任了这份证书。证书上会说明用途，例如服务器认证，客户端认证，或者签署其他证书。当系统收到一份新的证书的时候，证书会说明，是由谁签署的。如果这个签署者确实可以签署其他证书，并且收到证书上的签名和签署者的公钥可以对上的时候，系统就自动信任新的证书。&lt;/p&gt;&#xA;&lt;p&gt;在系统开始的时候，会自动安装信任一些证书机构，这些被称为根证书机构（CA）。根证书机构会为其他公司颁发证书，用于各种用途。当然，被签署的证书也可能是一份“可签署证书”，这样就要检查对方的资质。这样逐层签署，就会形成一个叫做“证书链”的东西。从拓扑结构上来说，其实应该是森林结构。&lt;/p&gt;</description>
			</item>
			<item>
				<title>CNNIC的证书</title>
				<link>//blog.shell909090.org/blog/archives/91/</link>
				<pubDate>Wed, 03 Feb 2010 11:41:00 +0800</pubDate>
				<guid>//blog.shell909090.org/blog/archives/91/</guid>
				<description>&lt;p&gt;最近，技术圈里面在争论CNNIC的证书被加入到信任根证书里面的问题。本文章试图和专业人士探讨这一变化的过程，以及向非专业人士说明会造成的影响。所有段落前会标明针对的群体。&lt;/p&gt;&#xA;&lt;p&gt;事情的起源，是有人发现CNNIC的证书被加入了Mozilla和系统的信任根证书链里。这引发了大家对早年CNNIC所做的流氓软件的回忆，因此大量技术人士强烈反对。所做的反应包括发起BUG讨论提请Mozilla删除CNNIC的证书，发起投票，写信给Entrust阐述问题等。下面会简述一下信任根证书链，还有CNNIC的背景和历史。&lt;/p&gt;&#xA;&lt;p&gt;本段适合非专业人士阅读。我们在访问一个网页的时候，通常有两种常见的通讯方式。http和https。区别在于，https会使用网站证书加密通讯过程。证书加密包含了几重的意义，首先，证书保证了你们的通讯没有第三者能截获。其次，证书验证了你访问的网站，是否是他号称的那个网站。也许很多人无法理解，这两种攻击怎么可能发生。要理解一点，中国电信也不是铁板一块，你完全无法指望他们的员工也绝对安全。否则的话，为什么所有银行都使用https来加密访问过程呢？&lt;/p&gt;&#xA;&lt;p&gt;本段适合专业人士阅读。那么，不使用证书会发生如何的攻击呢？一旦有某个人更改DNS(这东西让百度都吃了亏)，以某个服务器替换了你的银行(或者gmail)。那么，你访问你的目标域名的时候，就会被定位到他的中间机器上，他再使用代理技术，通过ssl访问目标服务器。整个过程如同走代理一样，唯一的问题就是你的密码泄露了。那么证书是如何防御这个攻击的呢？如果你访问目标机器，目标机器会让你验证一份证书，标明他的域名(用于防止域名劫持的)，签署者。一旦域名不符合，或者你不信任证书，就会报警。那么攻击者如何复制这个证书呢？首先他无法通过访问的方式获得证书原文，因为证书给你的其实只有公钥部分。其次他无法将这个过程也代理下来，因为如果这么做，下面的内容就全是不可解的了，那他就纯粹花钱把自己弄成代理服务器了。最后，他也无法生成，因为按照规定，只有域名的拥有者可以向特定的单位申请证书。于是，他无法复制证书，攻击就会失败。&lt;/p&gt;&#xA;&lt;p&gt;本段适合非专业人士阅读。然而，你需要信任什么证书呢？如果你要一家一家的信任证书，会发生什么？你见到是否信任就会习惯的去点，这对安全于事无补。因此，这里引申出一个证书链的问题。通常系统内内置了一些证书，这些证书叫做信任根证书。这些证书的权限是，可以让你信任其他证书。而被他们授权的证书，则分为可以继续授权和不可以继续授权两种。一旦被他们签署授权的证书，最起码你访问的时候不会有警告了。现在，CNNIC加入了这个根证书链。那CNNIC是个什么公司呢？他自称是中国科学院下属的中国互联网络信息中心，服务于科学和研究的机构，但很多人指出CNNIC的直接主管是工信部。当年，CNNIC推出中文域名服务，这项服务需要在几乎所有人的电脑内安装插件。他为了提高安装率，使用了不可删除的保护技术。这导致很多人的电脑安装后，无法卸载程序。至于安装呢？也不全是自愿安装(我不排除自愿者，绿霸还有自愿的呢)。他们曾经利用系统漏洞，向大量电脑上强行安装插件。而且CNNIC还借助官方身份，大量推行中文域名——其实他们根本就不是政府机构，而是非营利机构。并且，在前两年拼命忽悠CN域名，最近又突然停止域名解析(虽然是国家规定的)，道歉赔偿啥都没有。大家自己想，真的可以信任这种公司么？&lt;/p&gt;&#xA;&lt;p&gt;本段适合所有人阅读。现在CNNIC已经进入了信任根证书链，如果配合国家级的DNS劫持技术，理论上可以构造一个假的&lt;a href=&#34;http://mail.google.com&#34;&gt;mail.google.com&lt;/a&gt;，或者&lt;a href=&#34;http://www.hotmail.com&#34;&gt;www.hotmail.com&lt;/a&gt;。走代理，自己给自己签署一个证书。从而获得你的完整会话。这里(&lt;a href=&#34;http://autoproxy.org/zh-CN/node/66)&#34;&gt;http://autoproxy.org/zh-CN/node/66)&lt;/a&gt;有比较大的说明和讨论。&lt;/p&gt;&#xA;&lt;p&gt;我对这个事情的观点是。作为Mozilla或者任何根证书的发行机构，在没有直接证据的情况下，不大可能拒绝一个国家级机构的要求。然而，无论任何原因，信任一个机构，就代表你要为他的行为负责。如果CNNIC做出任何危害用户安全的行为，Moziila，微软，Debian.org会被我作为同罪者考虑和抵制。同时，系统发行的根证书系统，是否要去信任，是我们每个人的问题。如果你觉得CNNIC根本不值得信任，那么你可以删除他的所有证书，以及签署了他的所有证书。目前而言，我删除了CNNIC和Entrust的所有证书。&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
