我正在使服务器客户端使用ssl进行注册和登录过程 (如果重要的话,这适用于iphone)
我刚刚开始研究ssl是什么以及如何使用它,以及
看到这个过程中有证书可以买或自签。
如果我在网络服务器中使用自签名证书,网络浏览器会提醒我证明该证书是自签名的,我明白了。
但是如果我在常规应用程序中使用tcp(而不是http),特别是iphone,会发生什么情况。
我只是想进行注册/登录 信息(密码)是安全的,
并希望使用自签名 证书就可以了 目的。但我也需要做 确定这不会导致“不信任 证书 - 警报“类型的 在申请中使用时中断 除了网络浏览器。
我理解“不受信任的证书警报”是指客户端不应该信任此服务器。
但在我的情况下,客户端不需要验证服务器 服务器只需要以安全的方式获取客户端的密码。
谢谢
答案 0 :(得分:3)
回答你的问题:你可以,但你不应该!
首先,仅使用SSL进行身份验证根本不安全。身份验证过程可能会产生某种会话(例如cookie),然后在没有加密的情况下进行传输。因此,会话可能被盗(见Session hijacking)。
其次,使用自签名证书可以man-in-the-middle attacks。因此,有人可以窃取用户的密码,他甚至可能都不会注意到它。用户不知道客户端收到您自签名证书时弹出的警报与使用攻击者自签名证书时弹出的警报之间的区别。
我的建议:不要使用自签名证书。当发生攻击时,这对您和您的客户都有害。
答案 1 :(得分:3)
当您使用SSL连接用密码加密登录对话时,服务器向客户端发送公钥(以证书的形式),客户端生成一次性会话密钥,使用服务器对其进行加密公钥,并将其发送到服务器。然后,服务器可以解密会话密钥,因为它具有私钥。
用户然后使用会话密钥加密他的密码并将其发送到服务器,服务器可以解密它,因为它知道会话密钥。
现在,如果没有PKI,如果攻击者想要了解您的密码,他就可以欺骗服务器。他会向您发送他的公钥,并以常规方式生成会话密钥等,并将密码发送给他,以便他能够解密因为你在不知道自己是否可以信任的情况下使用他的钥匙。
PKI通过要求将公钥作为证书分发来保护您免受此类攻击。如果您信任签署证书的CA,则可以告知公钥确实属于服务器,并且使用它来加密密码是安全的。如果您不使用证书 - 或者您使用不受信任的证书 - 您通常不知道您将密码发送给谁。
您没有提供有关您自己的特定用例的足够信息,以确定您是否可以使用自签名证书...例如:您可能拥有一个预先分发的固定证书一些可信任的渠道,您可以在开始SSL对话时检查是否使用了正确的证书。如果是这种情况,那么您的客户端已经知道它具有正确的公钥,并且不需要能够检查签名。但是,一般情况下,您需要由受信任的CA签署的正确证书,否则您就没有安全性。
答案 2 :(得分:2)
这是受信任的签名机构的全部意义 - 任何由其他人签名的都应该提供安全警报。所以,不,没有任何有用的方法可以覆盖它(除非您可以控制客户端计算机 - 例如,用于公司内部站点的自签名证书,当您可以将自己的CA添加到客户端列表中时),网络浏览器或其他任何东西。
使用自签名证书,用户如何知道证书是您的还是攻击者?他不能。
如果您完全控制流程的两端(服务器和客户端),您当然可以指示客户端始终信任“来自Eugene的证书,指纹为A01AABB546AC”,但是您需要构建自己的证书基础设施(到期/撤销)。
答案 3 :(得分:2)
通过使用自签名证书,您将不会添加任何理论上的安全性,因为中间可能存在人。此通信中的对应方(您的客户端和您的服务器)将没有关于谁在说话或收听的其他信息,而这种加密的目的是确保通信中只有两个参与者以及其中至少有一个是已知的。
在您的情况下,密码不会安全地转移给您,因为您不知道它是否已经通过第三方。同样,用户将不知道他将密码发送给谁。
在实践中,处于中间攻击的人将需要进行一些设置工作,也许这个障碍是某种安全措施,但与迫使用户接受安全警告并带来不明后果的烦恼相反,确实存在“虚假安全感”的风险。
有些公司提供最低验证形式的免费证书(他们只会检查您“拥有”电子邮件地址hostmaster @ domain)。这样你就不会有警告了。
除非你有办法将你的证书或其指纹打包到应用程序,Piskvor说。
答案 4 :(得分:0)
转而回答 - 对于这类事情,你应该没问题。用户唯一不会得到的方法是确认证书的信任级别(例如,您可以在浏览器中使用已签名的证书),但根据您对@Piskvor的评论,这听起来不像是问题:你没有使用它。