2011-04-06 101 views
0

我正在使一个服务器客户端使用SSL来注册和登录过程。
(这是iPhone,如果它的事项)我可以使用自签名SSL证书用于商业用途吗?

我刚开始看是什么样的SSL以及如何使用它,
看到有可以在其中购买或自签名过程的证书。

如果我在Web服务器上使用自签名证书,Web浏览器会提醒该证书是自签名的,据我了解。
但如果我在常规应用程序中使用tcp(而不是http),特别是iphone使用自签名证书会发生什么情况。

我只是想在注册/登录 信息(密码)是安全的,
并希望使用自签名证书 将确定该 目的。但我也需要制作 ,确定这将不会导致“不可信 证书 - 警告”类型的 中断,当应用程序 以外的其他浏览器。

  • 编辑

我明白,“不信任证书警报”是说客户端不应该信任此服务器。

但在我的情况下,客户端不需要验证服务器。
服务器只需要以安全的方式获取客户端的密码。

谢谢

+0

这个问题并没有真正意义。对这个问题的简单回答可能是“是”,但是需要更多的上下文。你在写应用程序吗?如果是这样,你可以得到它做你喜欢的:-)你是否使用别人的应用程序,但想要你的证书 - 完全取决于应用程序。 – 2011-04-06 11:22:11

+0

@Rory我做的服务器和客户端(iPhone应用程序)。并想知道使用自签名认证是好的安全角度和可用性的角度 – eugene 2011-04-06 11:24:08

+1

@Eugene - 对于这种类型的事情,你应该没问题。用户唯一不能得到的是一种确认证书信任等级的方法(例如,您可以使用浏览器中的签名证书),但根据您对@Piskvor的评论,听起来并不像问题。 – 2011-04-06 11:31:00

回答

2

这是信任的签名当局的整个点 - 由别人签署任何东西应该给一个安全警报。所以,不,没有有效的方法可以覆盖它(除非您可以控制客户端计算机 - 例如,用于公司内部站点的自签名证书,何时可以将您自己的CA添加到客户端列表中)网页浏览器或其他任何东西。

使用自签名证书,用户如何知道证书是您的还是攻击者的?他不能。

如果您完全控制流程的两端(服务器和客户端),那么您当然可以指示客户端始终相信“Eugene的证书与A01AABB546AC的指纹”,例如,但您需要构建您的自己的证书基础设施(到期/撤销)。

+0

啊,他(客户端)不必认证我(服务器)。我只是想确保客户的密码安全地转移给我。它会有什么区别? – eugene 2011-04-06 11:26:20

+0

@Eugene:那么它应该没问题 - 除非客户端无法验证他是否真的在与服务器或其他人交谈。 – Piskvor 2011-04-06 11:42:03

0

移动回答 - 对于这种类型的事情你应该没问题。用户唯一不能得到的是一种确认证书信任等级的方法(例如,您可以使用浏览器中的签名证书),但根据您对@Piskvor的评论,听起来并不像问题:你没有使用它。

3

回答你的问题:你可以,但你不应该

首先,仅使用SSL进行身份验证根本不安全。认证过程可能产生某种会话(例如,cookie),然后在没有加密的情况下转移。因此会话可能被盗(见Session hijacking)。

其次,使用自签名证书允许man-in-the-middle attacks。所以,有人可以窃取用户的密码,他可能甚至不会注意到它。用户不知道客户端收到自签证书时弹出的警报与显示攻击者何时使用自签名证书的弹出窗口之间的区别。

我的建议:不要使用自签名证书。发生攻击时,对您和您的客户都有害。

2

由于中间人的可能性,您不会使用自签名证书添加理论安全性。通信中的对应方(您的客户和您的服务器)将没有关于谁在说或听的附加信息,而这种加密的重点在于确保通信中只有两位参与者,至少其中一个是已知的。

就你而言,密码不会安全地传送给你,因为你不知道它是否已经通过第三方途中。同样,用户也不知道他将密码发送给谁。

实际上,一个处于中间攻击阶段的人将需要一些工作来设置,也许这​​个障碍是某种安全性,但与强迫用户接受安全警告的困扰相反,后果以及“虚假安全感”的风险。

有些公司提供最低验证形式的免费证书(他们只会检查您是否拥有电子邮件地址hostmaster @ domain)。那样的话,你也不需要处理警告。

Piskvor说,除非您有办法将您的证书或其指纹与应用程序打包在一起。

+0

感谢您为什么它会很危险的详细说明。虽然有一个问题,为什么它与我的证书与应用程序打包不同(我认为这可能与iphone - appstore基础结构有关)。如果证书可以被中间人提取和使用,那么同样的问题会出现?我想你的意思是像内部网络一样对客户的完全控制? – eugene 2011-04-07 04:52:43

3

当您使用SSL连接加密与服务器向客户端发送一个公钥(以证书的形式)的密码登录对话,客户端产生一个一次性会话密钥,使用加密它服务器的公钥,并将其发送到服务器。服务器可以解密会话密钥,因为它具有私钥。

然后用户使用会话密钥加密他的密码并将其发送到服务器,服务器可以解密它,因为它知道会话密钥。

现在,如果攻击者想要学习密码,那么没有PKI,他可能会欺骗服务器。他会叫你公钥和你产生会话密钥等,以通常的方式,并给他你的密码,他将能够解密因为你会用他的钥匙不知道你是否可以信任它。

PKI通过要求公钥作为证书进行分发来保护您免受这种攻击。如果您信任签署证书的CA,您可以知道公钥真的属于服务器,并且可以安全地使用它来加密密码。如果您不使用证书 - 或者使用不受信任的证书 - 您通常不知道您要将密码发送给谁。

你不给你自己的具体使用情况下足够的信息,肯定会说你是否可以使用自签名证书...例如:这可能是因为您有提前分发一个固定的证书通过某个可信渠道,您可以在开始SSL对话时检查是否使用了正确的证书。如果是这种情况,那么你的客户已经知道它具有正确的公钥并且不需要能够检查签名。但是,通常情况下,您需要由受信任的CA签署正确的证书,否则您没有安全保障。

+0

这是一个很好的描述大局。写得好。 – Troy 2013-09-23 03:57:09

相关问题