我正在开发一个Android应用,需要通过SSL使用.Net webservices,我没有经验。现在我正在寻找有关SSL握手和证书的一些指导和解释。
注意:服务器正在使用 IP地址而非域名。这是一个内部网应用程序。
到目前为止,我已经从IIS 7在Web服务器中创建了一个证书(称为自签名?)。 要从Android应用程序中使用它,我发现了两种方法:
1)。在应用程序中嵌入证书(哪个证书?我如何获得?)
2)。信任所有证书(ppl说这种方法存在安全问题,你能详细说明吗?它还能做握手吗?)
证书:
握手中有多少种证书?它们是什么?
自签名证书是否具有根证书?如果是,我怎样才能得到它们?
是否可以将自签名证书从一台服务器移动/复制到另一台服务器?
HANDSHAKE:
首先,这个过程是否正确?
SSL握手过程(从网站复制)如下所述:
客户端通过发送URL来启动SSL握手过程 从以下开始:https://到服务器。
客户端最初向Web服务器发送每个加密的列表 它支持的算法。 SSL支持的算法包括RC4 和数据加密标准(DES)。客户端也发送服务器 它的随机挑战字符串将在以后使用 过程
嵌入式证书是否会在此处发送?
Web服务器接下来执行以下任务:
从加密列表中选择加密算法 客户支持和接收的算法。
向客户端发送其服务器证书的副本。
向客户端发送其随机挑战字符串
客户端使用从中接收的服务器证书的副本 服务器验证服务器的身份。
客户端从服务器获取服务器的公钥 证书。
客户端接下来会生成一个预主密钥。这是一个不同的 随机字符串,它将依次用于生成会话 SSL会话的密钥。然后客户端加密不同的值 使用服务器的公钥调用premaster secret,和 将此加密值返回给服务器。这是伴随着的 握手消息的键控哈希值和主密钥。哈希 用于保护握手过程中交换的消息。 哈希是从传输的前两个随机字符串生成的 服务器和客户端之间。
什么是主密钥?
服务器向客户端发送所有握手的密钥哈希值 到目前为止双方之间交换的信息。
这个键控哈希是由什么构成的?
然后,服务器和客户端从中生成会话密钥 不同的随机值和键,以及应用数学 计算
会话密钥用作加密和的共享密钥 解密服务器和客户端之间交换的数据。
当SSL会话超时或终止时,会丢弃会话密钥。
答案 0 :(得分:2)
我会尽力回答我的知识
在应用中嵌入证书(哪个证书?如何获取?) 这是标识客户端/应用程序标识的证书。您可以通过CA获取它或自签名。服务器将使用此证书来验证客户端/应用程序标识
信任所有证书(ppl说这种方法存在安全问题,你能详细说明一下吗?它还能做握手吗?) 它仍然进行握手,但它不会进行证书验证,除非你在内部连接(看起来你是这样),否则它是危险的。信任所有证书意味着实体可以声称他们不是,因此可以从用户那里获得机密信息。
握手中有多少种类型的证书,它们是什么?在握手中,您拥有服务器证书和可选的客户端证书(对于两个因素身份验证)
自签名证书是否有根证书?如果是的话,我怎么能得到它们呢?据我所知,根证书意味着CA本身识别的那些,因此它没有其他签名。由于您的身份仍然可以通过CA验证并且需要由CA签名,因此您的身份不会被归类为根证书
是否可以将自签名证书从一台服务器移动/复制到另一台服务器?虽然从一个平台到其他平台的过程不同,但简短的回答是肯定的。查看[此链接](http://www.sslshopper.com/how-to-move-or-copy-an-ssl-certificate-from-one-server-to-another.html),它有复制说明少数平台的证书
是否会在此处发送嵌入式证书?不,在验证服务器的标识完成后发送嵌入式(客户端)证书
什么是主密钥?主密钥是用于派生会话密钥以供以后通信的密钥。它还用于散列消息并验证下一组阶段中消息的真实性
这个密钥哈希是由什么构成的?它是由客户端发送的主密钥创建的。为了验证所有消息,服务器发送了所有已传递的消息并使用主密钥对其进行了散列。客户端也会使用相同的密钥对其消息进行散列,然后与服务器发送的数据进行比较。只有当哈希匹配时,我们才能确定我们仍在与同一服务器进行通信