要让项目实现 ssl 免密登录,首先需要开启 https 。
所以先从 Spring Boot 如何开启 https 说起 。
创建服务端证书为了开启 https ,我们需要一份证书 。
实际开发中,会在网上申请一个机构颁发的证书 。这里为了方便,我会使用 openssl 命令自己生成一个证书来使用 。
openssl req -x509 -sha256 -days 3650 -newkey rsa:4096 -keyout rootCA.key -out rootCA.crt
文章插图
所有的密码都是 123456 ,然后根据提示输入相关信息就好,如果嫌麻烦也可以直接回车跳过 。
这样我们就得到了证书 rootCA.crt 和私钥 rootCA.key 。
要在 Spring Boot 中实现服务器端 X.509 身份验证,还需要给我们的服务端也生成一个证书 。
openssl req -new -newkey rsa:4096 -keyout localhost.key -out localhost.csr
同样,密码是 123456 ,文件名 localhost 可以自行修改 。接下来就是用 rootCA 给我们的服务端证书做签名了,在此之前,我们先写一个配置文件,里面写有一些基本的配置
vi conf.config
authorityKeyIdentifier=keyid,issuerbasicConstraints=CA:FALSEsubjectAltName = @alt_names[alt_names]DNS.1 = localhost
其中 DNS.1 的值就是你的域名,比如 www.segmentfault.com , localhost 等等 。如果这里填错了,访问网站时,浏览器会提示网站不安全 。然后给服务端证书签名,会提示你输入 rootCA 的密码
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in localhost.csr -out localhost.crt -days 365 -CAcreateserial -extfile conf.config
成功后,让我们查看一下证书的信息openssl x509 -in localhost.crt -text
文章插图
最后再将签名证书和私钥打包到 PKCS 文件中
openssl pkcs12 -export -out localhost.p12 -name "localhost" -inkey localhost.key -in localhost.crt
这条指令会要你先输入 localhost.key 的密码,然后再要你定义 localhost.p12 的密码 。 localhost.p12 这个密码一定要记住,因为在 Spring 的配置文件中有用到 。另外需要特别注意的是, Spring 配置文件中 server.ssl.keyAlias 的值,就是命令中的 localhost(-name "localhost") 。
Spring Boot开启https把 localhost.p12 复制到 resources 目录下之后编译项目
文章插图
修改Application.properties文件
server.port=8888server.ssl.key-store=classpath:localhost.p12server.ssl.key-store-password=123456server.ssl.keyStoreType=PKCS12server.ssl.keyAlias=localhost
在 chrome://settings/security 中,选择 受信任的根证书颁发机构 导入 rootCA.crt文章插图
这时启动项目,就可以使用 https 访问网站了,而且浏览器提示网站时安全的 。
文章插图
创建信托证书信托证书中会存有 信任的外部实体的证书
这里我们只要将 rootCA.crt 添加进去就可以了
keytool -import -trustcacerts -noprompt -alias ca -ext san=dns:localhost,ip:127.0.0.1 -file rootCA.crt -keystore localhost.jks
然后将 localhost.jks 添加到项目中,并修改配置文件文章插图
application.properties添加:
server.ssl.trust-store=classpath:localhost.jksserver.ssl.trust-store-password=123456server.ssl.client-auth=need
注意:此时由于添加了server.ssl.client-auth=need,因为没有添加个人证书,所以这个时候刷新页面,项目会无法访问,如果想要同时兼任普通登录,可以将need改成want,但是want只会在第一次访问页面时才会向客户索取个人证书文章插图
创建客户端证书现在创建一个客户端的证书,步骤和服务端的差不多一样 。
openssl req -new -newkey rsa:4096 -nodes -keyout shurlormes.key -out shurlormes.csr
推荐阅读
- wps word引用excel数据并自动更新?wps表格粘贴到word怎样保持它不变
- 怎样用3分钟搭建 Python 人脸识别系统
- Linux快速找出Java应用占用CPU最高的线程
- 小白也可以用Python破解ZIP口令啦
- 深度学习中的图像分割:方法和应用
- 如何打造一个赚钱的公众号,利用兼职副业,收入或许是工资的N倍
- 龙井茶的功效,每天饮用龙井茶的量多少为宜
- 绿茶是否具有药用价值,防乳腺癌的绿茶
- 陕西|人在职场,有这四种迹象,恭喜你,说明领导要重用你了
- 嘉庆皇帝重用的大臣 嘉庆皇帝为什么没作为