我读过关于SSL协议的内容,现在,我知道它如何加密数据。但有一些我无法理解的东西。使用SSl,您确定要向正确的服务器发送数据并从中获取数据。但是怎么样? 我的意思是,如果我创建假证书并将其发送给特殊网站的请求,浏览器(或其他程序)如何检测假证书?
编辑:我并不是要创建自签名证书。我的意思是,如果我创建一个证书,证明其发行人和主题等是真正的证书,我怎么能验证我的证书! (唯一不真实的是公钥和签名)
答案 0 :(得分:15)
答案 1 :(得分:8)
SSL证书由certificate authority (CA)签署,public key encryption是用户已经信任的人(或者更有可能是设计操作系统信任的人)。
CA使用certificate revocation list对证书进行数字签名。基本的解释是CA有一个“私钥”,以及每个人都知道的“公钥”。通过一些数学我不明白,CA可以使用其私钥创建签名,可以使用其公钥轻松验证(但公钥不能用于创建新签名)。
当您从服务器获得SSL证书时,您将获得服务器的公钥,以及来自CA的签名,表明它是有效的(以及其他一些信息)。如果您知道并信任该CA,则可以检查签名并确定其是否有效。您还可以使用{{3}}确保其未被撤销。
基本上,您可以识别错误的SSL证书,因为它没有您信任的证书颁发机构签名。
答案 2 :(得分:3)
您创建的任何虚假证书都是自签名证书。
当连接到具有用户将立即忽略的自签名证书的站点时,浏览器将显示大的可怕警告。
为了避免出现警告,您需要一个由浏览器信任的证书颁发机构签名的证书,例如VeriSign。 这些公司将希望确保您真正拥有他们签署的证书的域名。
Re:修改:如果您从受信任的CA签名,则只能创建非自签名证书。
他们将拒绝为不同的主题签署证书。
答案 3 :(得分:0)
证书有效,因为它们遵循信任链。证书包含一个或多个受信任的发行人链;这条链是其工作原理的支柱。浏览器和几乎所有SSL证书库都进行此链检查,或者至少提供选项。
自签名证书(或以自签名证书结尾的链发布的证书)将无法通过此检查。
答案 4 :(得分:0)
根据我的理解,程序是
servers public key
certificate
(所有信息由受信任的CA用其私钥加密)sha1
和sha256
)servers public key
servers public key
的哈希值与certificate
存储的哈希值进行比较,如果不是同一浏览器将阻止站点,则certificate
中允许的域和该域(如果不允许的话),如果使用的浏览器不同则将阻止该站点certificate
中的有效日期和您的日期,如果无效,浏览器将阻止该站点。要伪造此商品,您将需要:
因此,如果您在地址栏中看到一个挂锁,则几乎总是安全的。