springboot支持http2
现在http/3都出来了,但是很多项目还是没有采用https,这个是说不过去的。
http3在2022/06/06 正式发布,具体见https://www.163.com/dy/article/H9BAGF3D0511X1MK.html
2022年6月6日,IETF QUIC和HTTP工作组成员Robin Mark在推特上宣布,历时5年,HTTP/3终于被标准化为 RFC 9114,这是HTTP超文本传输协议的第三个主要版本。
有了这个http3,可以节省一定的资源,有利于环境保护和商业发展。
本文讨论数字证书需要了解的几个疑问。
注:数字证书的基本原理类似,但具体实现和应用场景非常多,无法一一列出。
比较完整的,建议阅读张德明的<<PKI/CA与数字证书技术大全>>,该书还是很值得一读。
一、什么是数字证书
https://baike.baidu.com/item/%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6/326874?fr=aladdin
数字证书这一名词并非是我国原有,而是来自于英文digital certificate的翻译。数字证书从本质上来说是一种电子文档,是由电子商务认证中心(以下简称为CA中心)所颁发的一种较为权威与公正的证书,对电子商务活动有重要影响,例如我们在各种电子商务平台进行购物消费时,必须要在电脑上安装数字证书来确保资金的安全性。 [2]
CA中心采用的是以数字加密技术为核心的数字证书认证技术,通过数字证书,CA中心可以对互联网上所传输的各种信息进行加密、解密、数字签名与签名认证等各种处理,同时也能保障在数字传输的过程中不被不法分子所侵入,或者即使受到侵入也无法查看其中的内容。
如果用户在电子商务的活动过程中安装了数字证书,那么即使其账户或者密码等个人信息被盗取,其账户中的信息与资金安全仍然能得到有效的保障。
数字证书就相当于社会中的身份证,用户在进行电子商务活动时可以通过数字证书来证明自己的身份,并识别对方的身份,在数字证书的应用过程中CA中心具有关键性的作用。
作为第三方机构,必须要保证其具有一定的权威性与公平性,当前阶段我国的CA中心的从业资格是由国家工业与信息化部所颁发,全国范围内只有约50家企业具有数字认证的从业资格。 [2]
数字证书的基本架构是公开密钥PKI,即利用一对密钥实施加密和解密。其中密钥包括私钥和公钥,私钥主要用于签名和解密,由用户自定义,只有用户自己知道;公钥用于签名验证和加密,可被多个用户共享。 [3]
数字证书的基本工作原理主要体现在: [3]
第一,发送方在发送信息前,需先与接收方联系,同时利用公钥加密信息,信息在进行传输的过程当中一直是处于密文状态,包括接收方接收后也是加密的,确保了信息传输的单一性,若信息被窃取或截取,也必须利用接收方的私钥才可解读数据,而无法更改数据,这也有利保障信息的完整性和安全性。 [3]
第二,数字证书的数据签名类似于加密过程,数据在实施加密后,只有接收方才可打开或更改数据信息,并加上自己的签名后再传输至发送方,而接收方的私钥具唯一性和私密性,这也保证了签名的真实性和可靠性,进而保障信息的安全性。 [3]
数字证书有很多格式版本,主要有X.509v3(1997)、X509v4(1997)、X.509v1(1988)等。比较常用的版本是TUTrec.x.509V3,由国际电信联盟制定,内容包括证书序列号、证书有效期和公开密钥等信息。不论是哪一个版本的数字证书,只要获得数字证书,用户就可以将其应用于网络安全中。 [
从外行的角度看,可以简单把证书理解密码,暗号之类的,意思是这个意思。但技术上好比知道原子弹大体原理,但距离怎么制造出来还差个十万八千里。
二、http/2如何使用数字证书
原理大概如下图:
https://www.zhuangpeitu.com/article/13270634.html
网页加密
https://www.cnblogs.com/jing99/p/11687160.html
三、JAVA生成开发用的数字证书
可以使用keytool,例如:
# 生成
# 参数 keyStore指的是证书的文件名称
keytool -genkey -alias http2test -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore spring-rsa-test.p12 -dname "CN=hc.work,OU=LZF,O=HC,l=SH,ST=SH,C=CN" -storepass ziligengsheng
# 删除 (用keytool,不要用操作系统命令)
keytool -delete -alias http2test -keystore spring-rsa-test.p12 -storepass ziligengsheng
四、常见的数字证书颁发机构
国内: 如百度百科说说,国内大约50家,资格则是由 国家工业与信息化部所颁发
国外:Symantec SSL证书、GeoTrust SSL证书、Comodo SSL证书、Thawte SSL证书、RapidSSL证书
此外国内好像也有根证书颁布机构,例如上海CA:
https://baijiahao.baidu.com/s?id=1714683841754180620&wfr=spider&for=pc
近日,上海CA加入由奇安信可信浏览器牵头并联合麒麟、统信两大操作系统共同发起的 “商用密码证书可信计划”,成为国内首批通过奇安信、麒麟、统信联合认证信任的CA厂商,即上海CA的根证书将预置在麒麟操作系统和统信UOS操作系统下的奇安信可信安全浏览器中
我们选择机构的时候,需要考虑:为什么会有那么做的机构,差别是什么?如何选择?
五、中国的数字证书安全
这是一个严重和严肃的问题。哪一天需要独立的时候,看看怎么解决这个问题。国家已经在开始处理这个。
六、springboot2启用http2
springboot是通过容器来实现了,例如tomcat.tomcat9自己就支持http2。
参考:https://www.modb.pro/db/324910
主要两个步骤:
- 使用oracle jdk的keytool 生成 证书
- 配置springboot
注意:这个证书仅仅用于开发,不能用于生产。证书很便宜,这个钱还不怎么够买一双尚未好一点的皮鞋,不要省。
测试环境:windows 11,springboot 2.6.7
整体过程比较简单。
按照上面的做,之后在firefox测试,结果如下图: