从加解密到HTTPS 一、名词解释明文未经加密的信息。密文加了密的信息。密钥加解密时供算法使用的密码相当于我们的银行密码另一种说法是盐值。私钥个人所有的不经公开的密钥。公钥公开的密钥。二、加密和解密1、含义明文通过一定的算法转换成密文的过程就是加密相反将密文通过使用加密时用的相同算法进行逆运算得到明文的过程就是解密。比如密钥是1明文是100算法是加减法加密过程明文100--加密1001101--密文101解密过程密文101--解密101-1100--明文1002、对称加密对称加密就是指加密和解密的密钥是相同的。特点是安全系数不高但性能高加解密快。3、非对称加密非对称加密就是指加密用的密钥和解密的密钥是不相同的。一般来说指:加密时使用公钥,解密时使用私钥。CS架构中私钥只存在于服务端客户端只持有公钥具有加密能力。特点是安全系数高但性能低算法复杂加解密慢。4、SSL与TLSSSL是结合对称加密和非对称加密各自的优点的产物其运用于HTTPS中有效地解决了数据在网络传输中的安全问题不再像HTTP那样让数据以明文方式在网络中裸跑了。HTTPS中SSL的加解密过程一次HTTPS请求中客户端和服务端先要确定加密的密钥然后才是正式的数据传输。客户端会先向服务端索要公钥然后自己生成对称加密的密钥随机数然后用公钥加密对称加密的密钥将其发送给服务端最后各自通过对称加密的密钥对传输的数据进行加密传输。目前SSL已经被淘汰现在使用的都是TLS 1.2或者1.3。他们二者机制大体同源但SSL所有的版本都不安全现在HTTPS底层只跑TLS。三、数字证书1、含义和分类证书顾名思义证明某种东西确实是某样东西。如学校给你发的毕业证书一样是大家认可的证明你是某某大学毕业的证书上也有学校的公章。但你某天去找工作说自己某某大学毕业的你不能口头说啊公司又不傻肯定不信要你出示证书加以证明。其实HTTPS的公钥也是通过数字证书传递的证书不仅包括公钥信息还包含了公司域名公司名称地址证书的颁发机构证书的过期时间等等。HTTPS用到的证书被称为SSL证书当然还包括其他证书具体分类SSL证书代码证书客户端证书双因素证书2、证书的制作1jdk内网调试2上线申请阿里云、腾讯云DV免费证书外网3、证书的大致内容公钥、算法、证书颁发者、证书的过期时间、密钥等根证书证书有很多类别如果不加以区分让一个对象来负责颁发所有的证书那么无疑会增加其负重。所以就像公司一样针对不同的功能设立不同的部门分别负责各自的职责范围的事这样不仅对事务进行了平摊减轻单个的负重而且也减少了出错的概率。其实证书的管理机制也是如此先由一个大的根证书分散出分支证书形成证书路径。如果根证书验证不通过或者不受信任其下的所属证书也是无效的。证书路径如下图就是证书路径的展示。其大致表示*.csdn.net的证书由Geo Trust CN RSA CA G1颁发而它又是根证书Digicert管理、授权。4、CACA是Certificate Authority的缩写也叫“证书授权中心”专门颁发权威证书的机构。证书是可以自己制作的但是在实际应用中如何确保证书的安全可靠呢那就必须有个受信任的机构或公司专门来做这事儿。CA就是这样的机构。四、HTTPS1、含义HTTPSHyperText Transfer Protocol Secure安全版超文本传输协议。可以说HTTPS HTTP通信 TLS加密 数字证书身份认证。其中http负责说话的内容TLS负责加密说话的内容数字证书SSL证书负责验证对方身份。扩展HSTSHSTS是国际互联网工程组织 IETE 正在推行一种新的 Web安全协议HTTP Strict Transport SecurityHSTS。采用 HSTS 协议的网站将保证浏览器始终连接到该网站的 HTTPS 加密版本不需要用户手动在 URL 地址栏中输入加密地址。每次访问时都会发送该请求头失效时间是两年秒数这个失效时间每次都会设置为两年后:Strict-Transport-Security max-age63072000; includeSubdomains; preload2、HTTPS握手工作流程①、你打开网页服务器主动把数字证书发给浏览器②、浏览器校验证书真伪CA签名、有效期、域名匹配假证书直接报错③、校验通过读取证书里的公钥④、浏览器随机生成一把会话密钥用公钥加密后发给网站服务器⑤、只有网站自己的私钥能解开拿到会话密钥后续双方用会话密钥加密传输数据全程就算是数据被黑客拦截也只是乱码。ps公钥放在证书里公开随便看用来加密而私钥是网站服务器自己保存绝不外传用来解密。3、黑客攻击如果你是黑客要怎么去攻击https通信窃取他们之间的通信讯息呢①、中间人劫持客户端公钥会话密钥- 黑客看不到会话密钥因为会话密钥只能私钥才能解于是黑客伪装客户端将公钥黑客会话密钥发送给服务器- 服务器拿到黑客给的公钥加密后会话密钥与黑客通信。这个过程中黑客始终是不知道客户端与服务器的会话密钥的只会让客户端和服务器对不上暗号通信失败窃取不到数据。②、中间人伪造证书中间人这次伪装成服务器伪造一套公私钥假装自己就是服务器。客户端 - 中间人黑客假服务器-真服务器对于客户端黑客就是服务器对于真服务器黑客就是客户端。所以就达到窃听了但是客户端有办法鉴别黑客伪装的服务器因为浏览器会自动校验对方的证书如果是非受信任非正规证书机构颁发的的就会告警这时客户端是能感知到的于是就拒绝访问从而避免窃听。面试题既然说https是安全的为什么抓包工具还是能窃听到明文信息呢答抓包工具就是利用中间人伪造证书的方式然后你也同意了这种非受信任的证书的通信。五、利用JDK工具生成自签证书我们在开发https协议的Web应用时需要先在本地进行调试或者在内网服务实现https时。我们希望自己就能生成自签的证书、以及公钥私钥。那么JDK的keytool工具就能实现这点以下分解聊下怎么使用该工具。1、前置条件①、配置好JDK环境变量cmd 终端输入keytool -version能输出版本即生效②、Windows使用CMD/PowerShellMac上使用Linux终端2、核心概念密钥库.keystore/.jks二进制文件用来存放一对公私钥字签证书JavaWebSpringBoot、Tomcat默认读取jks密钥库。公钥封装在证书里对外公开私钥存放在密钥库内部绝不泄漏字签证书自己给自己发证浏览器不信任。3、一键生成JKS密钥库keytool -genkeypair -alias myhttps -keyalg RSA -keysize 2048 -storetype JKS -keystore myssl.jks -validity 365参数解释-alias myhttps密钥别名一个密钥库可以存多组密钥别名区分-keyalg RSA加密算法HTTPS标准RSA-keysize 2048密钥长度安全最低标准-storetype JKS密钥库格式Java专用-keystore myssl.jks生成的密钥库文件名-validity 365证书有效期365天执行后依此填写信息1、密钥库口令设置密码1234562、姓名、组织、城市、省份、国家3、是否正确4、密钥口令可和密钥库口令一致直接回车执行完毕后当前文件夹生成myssl.jks文件4、从JKS文件中导出证书导出公钥证书浏览器需要的公钥直接从证书中获取。keytool -exportcert -alias myhttps -keystore myssl.jks -file public.cer执行后提示输入密钥库密码之后就会得到public.cer文件这个文件里包含了公钥证书信息可以发给其他人。私钥还是在jks文件内部无法从cer证书提取私钥5、把证书导入JDK信任库这步是为了解决本地调用接口报证书不信任。本地Java后端调用自己的HTTPS接口报错SSL握手失败把cer导入JDK信任列表。keytool -import -alias myhttps-trust -file public.cer -keystore %JAVA_HOME%\jre\lib\security\cacerts执行后提示输入信任库密码默认changeit6、SpringBoot项目配置Httpsapplication.ymlserver: port:8443 ssl: key-store:classpath:myssl.jks key-store-password:123456 key-alias:myhttps key-store-type:JKS启动项目访问https://127.0.0.1:8443浏览器提示不安全属于正常现象字签证书选择继续访问即可调试