作者回复: 说的非常好。
作者回复: √
作者回复: 态度很认真,值得表扬。
有一点小错误,数字签名的防窜改不是因为“修改之后生成的数字签名无法被CA公钥解密”,而是修改后的摘要变动了,与签名里解密出的原始摘要不匹配,所以能够发现原文被窜改。
另外,你说的这些是目前流行的PKI体系,但公钥私钥本身并不一定要用证书,它们本身属于密码学。
作者回复: 感谢补充,这个就是nonce了。
作者回复: 你理解的很对,服务器会在握手的时候返回整个证书链,但通常为了节约数据量,不会包含最终的根证书,因为根证书通常已经在浏览器或者操作系统里内置了。
作者回复:
1.基本正确,浏览器用的实际上是证书里的公钥,不是裸公钥。
2.Nginx中配置的私钥就是用来证明服务器身份的私钥,也就是服务器证书对应的私钥,用来在tls握手时验证身份。
3.可参考后面两讲,看看证书和私钥是怎么起作用的。
作者回复: 哪里不明白可以随时问。
作者回复:
1.是的,代理作为中间人,对客户端和服务器分别使用TLS通信。
2.客户端证书的用法在后面有讲,其实并不难,因为证书本身是被ca签名的,可以防窜改,直接发就行。
作者回复: 学习进度很快啊,回答的也很形象生动。
作者回复: 后面两讲会对tls的握手有详细的流程图,请参考。
作者回复: md5、sha1的摘要是二进制数据的16字节、20字节,不能直接看,所以做了hex编码,也就是一个字节变成了两个字符,所以扩大了两倍。
作者回复: 1.只要私钥加密后就可以了,不需要公钥参与,私钥加密的结果就是签名。
2.如果每次都要对消息签名就需要做这两步,先摘要再加密,也就是数字签名。
3.但私钥运算很慢,实际上不会这样做,而是在握手的时候签名验签,接下来会讲tls握手,它实现了完善的密钥交换过程。
作者回复: √
作者回复: 1/2可以看接下来的tls握手,如何交换如何确认就要使用一种双方都认可的协议。
3.私钥需要自己保管,方法有很多,比如u盾(特殊的usb设备),或者直接就是一个文本文件,想怎么存就怎么存。
4.https只保证通信链路的安全,在这之外它是无能为力的。
作者回复: 1的理解有点小问题,信任链里其实不一定非要有ca,如果只是在一个很小的范围内,没有证书只用公钥也可以建立信任关系。
关键是对称密钥没有私密性,不能实现身份认证。
作者回复: 不是这样的,数字证书内本身就有ca私钥的签名,它自身就可以保证完整性,否则也不会叫“证书”了。
作者回复: 身份验证之后就可以确保安全了,后面就可以交换会话密钥进行安全通信了。
作者回复: 缺了使用非对称加密交换会话密钥的步骤。
作者回复: 之前好像有同学问过这个问题。
20字节被16进制编码了,一个字节编码成两个字符,所以总共是40个字符。
比如0x71,是一个字节,但显示出来就是‘7’‘1’,变成两个字符。
作者回复:
1.原文就是原始的数据,不管是密文或者明文都可以,原文允许公开就是明文,不公开就用密文,总之就是防止原文被窜改。
2.在hmac里,会话密钥同时加密原文和摘要,就可以保证完整性,因为会话密钥是保密的。
3.完整性的关键是加密用的密钥保密,保证摘要不被窜改。所以在混合加密系统里可以用会话密钥实现完整性。当然私钥天然可以实现完整性。