公钥私钥和HTTPS分析

Posted dyunfeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了公钥私钥和HTTPS分析相关的知识,希望对你有一定的参考价值。

从不同的层面去保护数据的安全。
两者有几个类似的概念:加密,解密等,但是实现方式不同:

1、基于springboot的HTTPS具体实现(使用HTTPS在网络上跑的数据包就会加密,可以通过抓包工具查看和HTTP的不同)
HTTPS是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。
配置:(1)使用jdk创建证书:先打开cmd,然后输入keytool -genkey -alias server -keyalg RSA -keystore ./server.keystore
(2)将上一步生成的keystone文件复制到项目的resources目录,在application.properties添加如下配置
server.port=8080
server.ssl.key-store=server.keystore
server.ssl.key-alias=server
server.ssl.enabled=true
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS
(3)http访问自动转https访问

@Configuration
public class TomcatConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }

    private Connector createTomcatConnector() {
        Connector connector = new
                Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8081);
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
    }
}

2、传输数据加密加签:公钥与私钥原理(百度一堆)

1)鲍勃有两把钥匙,一把是公钥,另一把是私钥
技术图片
2)鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。
技术图片
3)苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。
技术图片
4)鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
技术图片
5)鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

非对称加解密本身慢,所以只加密文档的哈希而不是整个文档。如果你想检测签名是否有效,可以解密签名并自己对文档进行哈希转换(生成摘要),看看这两个值(摘要)是否匹配,这样我们就知道所接收的文档与服务器发送是否完全一样。如果文档在传输中被更改了,则哈希与服务器作为签名提供的值(摘要)不匹配,这叫做无效签名。
技术图片


6)然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。
技术图片

7)鲍勃将这个签名,附在信件下面,一起发给苏珊。
技术图片

8)苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

技术图片


9)苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。
技术图片


10)复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
技术图片


11)后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。
技术图片


12)鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
技术图片


13)苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。
技术图片

 

以上是关于公钥私钥和HTTPS分析的主要内容,如果未能解决你的问题,请参考以下文章

https私钥和公钥(转)

Javascript ECDSA 获取私钥和​​公钥?

支付宝私钥和公钥的生成方法

获取 X509Certificate2 私钥和公钥

如何使用 web3 创建私钥和公钥?

如何读取 .pem 文件以获取私钥和​​公钥