我不确定之前是否有类似的问题(我找不到任何问题),但是有可能保护客户端/服务器免受中间人攻击吗?
我正在编写一个客户端应用程序来与Server通信 . 通信将基于SSLv3 . 我可以使用服务器的自签名证书,但担心其他人在同一服务器名称中生成相同的自签名证书并假装是它 . 我的客户端应用程序使用OpenSSL库 . [客户端和服务器是基于节俭的,如果它有任何区别] . 我是否可以在保持对自签名证书的支持的同时避免此类攻击?
是 .
简而言之,只有当客户端事先不知道证书时,自签名证书才比CA证书更不安全,因此无法验证服务器是否为其所声称的人 .
如果您将自签名证书添加到客户端并且不接受任何其他证书,那么您实际上与拥有证书颁发机构签名证书一样安全(或者,可以说,甚至更多) .
使用或不使用证书颁发机构来保持SSL安全的重要部分是:
服务器私钥(在CA的情况下,其所有根的私钥)保密 .
客户端知道服务器证书(或其CA根) .
您可以对服务器的证书进行硬编码,并将其与您收到的证书进行比较 .
或者更好的是,创建由CA签名的CA证书和服务器证书 . 让CA在客户端上受信任(再次通过在应用程序中对其进行硬编码)并使用CA证书验证收到的服务器证书 .
如果您可以充分保护您的私钥,假设用户实际查看证书,中间人将无法伪装成您 . 自签名的问题是,如果您希望用户将异常添加到其浏览器中,或者只是忽略该警告,那么您将面临中间人攻击,因为其他人可能会创建自己的证书 .
当然,“足够好地保护你的私钥”并不是微不足道的 . 当您支付“Verisign”证书时,您不会为创建证书的软件付费 - 您需要为他们保护存储私钥的建筑物的安全部队付费 .
3 回答
是 .
简而言之,只有当客户端事先不知道证书时,自签名证书才比CA证书更不安全,因此无法验证服务器是否为其所声称的人 .
如果您将自签名证书添加到客户端并且不接受任何其他证书,那么您实际上与拥有证书颁发机构签名证书一样安全(或者,可以说,甚至更多) .
使用或不使用证书颁发机构来保持SSL安全的重要部分是:
服务器私钥(在CA的情况下,其所有根的私钥)保密 .
客户端知道服务器证书(或其CA根) .
您可以对服务器的证书进行硬编码,并将其与您收到的证书进行比较 .
或者更好的是,创建由CA签名的CA证书和服务器证书 . 让CA在客户端上受信任(再次通过在应用程序中对其进行硬编码)并使用CA证书验证收到的服务器证书 .
如果您可以充分保护您的私钥,假设用户实际查看证书,中间人将无法伪装成您 . 自签名的问题是,如果您希望用户将异常添加到其浏览器中,或者只是忽略该警告,那么您将面临中间人攻击,因为其他人可能会创建自己的证书 .
当然,“足够好地保护你的私钥”并不是微不足道的 . 当您支付“Verisign”证书时,您不会为创建证书的软件付费 - 您需要为他们保护存储私钥的建筑物的安全部队付费 .