大概的原理我知道,就是非对称加密,但是还有很多不是很明白的地方:
1,私钥和公钥都是存放在服务器端吗,客户端和服务器端建立连接后公钥才传输到客户端吗?
2,证书起什么作用,是不是在证书中存放私钥、公钥和服务器的其他信息
3,我把iOS-inhouse app 放到https服务器上,从设备上能打开网页,但是不能下载安装app,设备安装了用openssl生成的证书后就可以下载安装app了,为什么浏览网页不需要客户端安装证书而下载iOS的app就需要
4,客户端安装的证书和安装在web服务器端的证书是同一样东西吗,如果不是,有什么区别
谢谢
http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser
1、服务器的私钥和公钥存放在服务器端,建立连接后服务器才发送证书(公钥)到客户端;
2、证书是保存密钥对的一种方式,它可以只包含公钥或者包含公、私钥,不保存服务器的其它信息(虽然我不知道你这里的其它信息是什么),除了密钥对,证书还包含一些标识和验证信息。
3、通信双方是否必须都需要证书,是由双方协定的,在你的例子中,通信双方认为下载 app 是需要双方都可信的操作;
4、是同一样东西,只是用途不同,这些信息会在证书中标识。
@会长: 我本来写了很长,后来放弃了,确实没法给你讲明白。我只能说我说的是同一样东西,不是同一个文件,请注意你前后问问题的方式,以及你语句的歧义。再次,客户端证书和服务端证书可以是同一个证书。
你用 openssl 制作的证书都是测试用证书,你得花钱买。
另外,证书有含私钥(pfx)和不含私钥(.cer)之分。
人家证书生成好了,你随便搞个证书,让它加到它的信任列表里就行,或者你让它从它的根证书给你颁发一个客户端证书。
我建议你认真学些下 PKI 的相关知识,你把概念搞清楚了再问。
@会长: 你能把 CA 之类的概念搞清楚了再问么?
http://baike.baidu.com/view/7615.htm
还 “Create your own CA Authority certificate”,你尽管自己建好了,你看谁认你的 CA。
@会长: “需要把CA发到每个设备安装”,是不是就是我说的“再次,客户端证书和服务端证书可以是同一个证书。”? 但这不是规范的做法,因为这是你自建 CA 发布的证书,证书是无法通过根验证的,也就是我们经常在 IE 浏览器看到证书错误的,现象描述在这里:http://zhishi.sohu.com/question/27698882.html。
为什么对你“冷言冷语”?因为你提了 4 个问题,我每个都有针对性的回答了,除了第 4 个问题,我们在“同一样”,“同一个” 的理解上有差别外,我已经完全答复了你,你要觉得有疑问,你可以追问,但是你不能篡改你的原问题。我们来看你的原问题:
客户端安装的证书和安装在web服务器端的证书是同一样东西吗?
当你对我的第 4 个回复有疑问时,你的提法就变了,如下:
但是上面的那个链接里作者放在apache服务器上的证书和发到设备的证书不是同一个文件。
如果你认为“A和B是同一样东西”同“A和B是同一个东西”是等同的话,那我只能说我语文水平差,给你道歉。
我个人做事严谨,尽量使用没有歧义的语句来交流,这是做需求的习惯,不然你需要跟客户扯皮。我在博客园回答了很多问题,遇到问题中明显有歧义的地方,我通常都不会直接回答问题,而是先让提问者把自己的问题尽可能的描述正确来,避免回答和提问的扯皮。我只能说我在你这里犯了个错误,没有先去追问你,你的“同一样东西”是指下列的哪种:
1、客户端证书和服务端证书是同一份证书。
2、客户端证书和服务端证书不是同一份证书,但是可以互换。
3、包括 1 和 2。
注意,我这里用了“同一份证书”,而不是“同一个文件”,为什么?因为仔细一想,如果用“同一个文件”表达,仍然存在歧义,这会给你造成理解上的障碍,为什么呢?因为这会让你觉得如果你制作了一份证书,你得到一个证书文件,你就需要原封不动的把此文件拷贝到客户端去,事实这是最简单的做法,但不是唯一的做法,也就是说我们并不一定需要拷贝“同一个证书文件”,比如,我们可以通过导出功能,导出“同一份证书”的“另一个证书文件”,我们还可以导出“同一份证书”的不同部分为“多个证书文件”。这就是我的问题所在——纠结于细节和概念解释的正确性。
如果你不问1,2,4,只问 3 的话,那么回答就比较简单,我会先了解你的需求,比如是否允许为所有客户端安装自签名证书?是否允许应用部署在不受信的第三方网站上?那么 http://blog.csdn.net/zhaoxy_thu/article/details/21133399 的做法是一种解决方案,这种方式我们经常使用,从你的 App 部署到一般的部署在 IIS 中的 HTTPS 应用,因为客户端是我们自己编写的,因此我们可以在客户端和服务端之间的信任关系上在“口头”上达成一致,从而绕过 PKI 中的部分安全规范。这种解决方案的缺点就是,你仍然是不受信的,无法与基于 PKI 规范的受信系统交互。
@Launcher: 我刚开始可能(之所以用“可能”这两个字,是因为年代久远了,我不能完全回忆起当初是怎么想的了)是不确定证书是不是以文件的形式存储的,所有说“东西”。后来认为是以文件的形式存储的,为了减少歧义,表述更准确,所有改成了“文件”了。不好意思啊
我现在已经安全清楚了非对称密码加密的原理,以及CA是什么。我当初做的那个iOS应用,安装包需要放到支持https的地址,公司拒绝购买CA证书。所有我自己给自己签发了证书,权宜之计,公司也是同意这样做的。就相当于绕过了苹果规定的硬性限制,并非为了安全上的考虑。
再次感谢指点。
一般是 通信的2端都各自握有一套密匙对,注意是各自握有一套,不是只有一套。(非对称加密,公私加密的只能私钥解密)。
如我写个内容给你,不想让别人看到,只能让你看到。你的公私是放到其他人可以得到的地方的,我写的内容先用我的私钥加密(我的公私也是放其他人可以获取到的地方的,到时内容就可以获取到我的公私用我的公私进行解密),并且用你的公私加密(到时就用你自己保存的私钥解密,保证了内容只有你能解密读出来)。2次加解密,就保证了内容一定是我写的并且只有你能看。不知我是否有讲明白