日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

瀏覽:18日期:2023-07-27 10:11:48

要讓項目實現 ssl 免密登錄,首先需要開啟 https

所以先從 Spring Boot 如何開啟 https 說起。

創建服務端證書

為了開啟 https ,我們需要一份證書。

實際開發中,會在網上申請一個機構頒發的證書。這里為了方便,我會使用 openssl 命令自己生成一個證書來使用。

openssl req -x509 -sha256 -days 3650 -newkey rsa:4096 -keyout rootCA.key -out rootCA.crt

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

所有的密碼都是 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.comlocalhost 等等。如果這里填錯了,訪問網站時,瀏覽器會提示網站不安全。

然后給服務端證書簽名,會提示你輸入 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

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

最后再將簽名證書和私鑰打包到 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 目錄下之后編譯項目

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

修改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

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

這時啟動項目,就可以使用 https 訪問網站了,而且瀏覽器提示網站時安全的。

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

創建信托證書

信托證書中會存有 信任的外部實體的證書

這里我們只要將 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 添加到項目中,并修改配置文件

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

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只會在第一次訪問頁面時才會向客戶索取個人證書

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

創建客戶端證書

現在創建一個客戶端的證書,步驟和服務端的差不多一樣。

openssl req -new -newkey rsa:4096 -nodes -keyout shurlormes.key -out shurlormes.csr

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

在生成客戶端證書時,那些信息不建議跳過,因為在后續的步驟中,會獲取其中的信息用以登錄。比如我在 Common Name 處填寫的信息,就是等下用來登錄的用戶名。

接下來用 RootCA 給客戶端證書簽名

openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in shurlormes.csr -out shurlormes.crt -days 365 -CAcreateserial

然后再將簽名證書和私鑰打包到 PKCS 文件中

openssl pkcs12 -export -out shurlormes.p12 -name 'shurlormes' -inkey shurlormes.key -in shurlormes.crt

最后在 chrome://settings/security 選擇 個人證書shurlormes.p12 導入,期間會要你輸入它的密碼。

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

這時候刷新頁面,瀏覽器就會彈出一個對話框,讓你選擇個人認證了。

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

Spring Boot獲取個人證書信息

恭喜你,到了這一步, pki 登錄已經完成了 99% 了。接下來就是通過 request 獲取證書信息,然后處理字符串,拿到用戶名做登錄即可。

@RequestMapping('/login')public String login(HttpServletRequest request) { X509Certificate[] certs = (X509Certificate[]) request.getAttribute('javax.servlet.request.X509Certificate'); if(certs != null) { X509Certificate gaX509Cert = certs[0]; String dn = gaX509Cert.getSubjectDN().toString(); System.out.println('個人證書信息:' + dn); String username = ''; String[] dnArray = dn.split(','); for (String dnItem : dnArray) { String[] dnInfo = dnItem.split('='); String key = dnInfo[0]; String value = dnInfo[1]; if('cn'.equalsIgnoreCase(key.trim())) {username = value;break; } } System.out.println('用戶名:' + username); if(!StringUtils.isEmpty(username)) { SecurityContext securityContext = SecurityContextHolder.getContext(); User userDetails = new User(username, '', Collections.EMPTY_LIST); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken(userDetails, '', Collections.EMPTY_LIST)); return 'redirect:/'; } } return 'login';}

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

Spring Boot 同時開啟http和https

相信大家都發現了,現在項目只能通過 https 訪問,如果用 http 訪問瀏覽器直接返回 Bad request 了。

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

要同時開啟 httpshttp ,只需添加一個 TomcatConfig 就可以

@Configurationpublic class TomcatHttpConfig { @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); tomcat.addAdditionalTomcatConnectors(initiateHttpConnector()); return tomcat; } private Connector initiateHttpConnector() { Connector connector = new Connector('org.apache.coyote.http11.Http11NioProtocol'); connector.setScheme('http'); connector.setPort(9999); connector.setSecure(false); return connector; }}

這時候啟動項目,注意看控制臺打印的信息。

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

說明已經成功啟動 http 在端口 9999https8888 ,頁面也可以成功訪問了。

Spring Boot 實現https ssl免密登錄(X.509 pki登錄)

Spring Boot http自動跳轉https

上面我們已經可以同時訪問 htt p和 https ,但如果我要訪問 http 的時候,自動跳轉的 https 呢?

只需要在上面的基礎上稍微改改就可以了。

@Configurationpublic class TomcatHttpConfig { @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) {SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint('CONFIDENTIAL');SecurityCollection collection = new SecurityCollection();collection.addPattern('/*');securityConstraint.addCollection(collection);context.addConstraint(securityConstraint); } }; tomcat.addAdditionalTomcatConnectors(initiateHttpConnector()); return tomcat; } private Connector initiateHttpConnector() { Connector connector = new Connector('org.apache.coyote.http11.Http11NioProtocol'); connector.setScheme('http'); connector.setPort(9999); connector.setSecure(false); connector.setRedirectPort(8888); return connector; }}踩坑總結 把服務端證書p12文件添加到項目resources后,記得rebuild項目,否則target的classes中沒有生成證書文件,會導致項目啟動失敗。 application.properties中的server.ssl.keyAlias需要和生成p12文件的-name一致,否則也會導致項目無法啟動。 如果要指定域名,需要修改conf.confg中的DNS.1,否則瀏覽器會提示網站不安全。代碼地址

https://github.com/Shurlormes/pkilogin

參考資料

https://www.baeldung.com/x-509-authentication-in-spring-security

到此這篇關于Spring Boot 實現https ssl免密登錄(X.509 pki登錄)的文章就介紹到這了,更多相關Spring Boot https ssl免密登錄內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
综合干狼人综合首页| 日韩高清中文字幕一区二区| 蜜桃视频欧美| 99在线精品免费视频九九视| 丝袜美腿亚洲一区| 日本国产一区| 国产精品一区二区三区av麻| 欧美精品aa| 亚洲一区资源| 亚洲欧美日本视频在线观看| 日本天堂一区| 国内揄拍国内精品久久| 91精品综合| 亚洲香蕉久久| 精品国产鲁一鲁****| 免费不卡中文字幕在线| 老牛影视一区二区三区| 国产亚洲一区| 免费污视频在线一区| 一区二区电影在线观看| 麻豆精品在线观看| 99久久夜色精品国产亚洲1000部| 亚洲综合三区| 国产精品porn| 婷婷六月综合| 国产精品扒开腿做爽爽爽软件| 久久精品一区二区不卡| 日韩在线麻豆| 日韩电影二区| 日韩精品一区二区三区免费视频 | 色综合视频一区二区三区日韩| 久久国产生活片100| 日韩av首页| 日韩一区二区三区高清在线观看| zzzwww在线看片免费| 一区二区亚洲视频| 福利在线免费视频| 婷婷精品在线| 91精品国产自产在线观看永久∴| 日韩黄色在线观看| 91精品一区国产高清在线gif| 欧美久久香蕉| 91精品一区二区三区综合| 日韩美女国产精品| 999视频精品| 国产精品宾馆| 美国三级日本三级久久99 | 国产精品久久久亚洲一区| 欧美 日韩 国产一区二区在线视频| 欧美日韩一区自拍| 日韩视频免费| 欧美成人精品一级| 伊人久久大香伊蕉在人线观看热v| 久久精品网址| 日韩va亚洲va欧美va久久| 在线日韩中文| 极品av在线| 麻豆视频观看网址久久| 在线观看亚洲精品福利片| 99成人超碰| 超碰超碰人人人人精品| 国产精品成人**免费视频| 亚洲专区视频| 亚洲欧美日韩国产| 午夜国产一区二区| 日韩黄色大片| 国产精品一区二区免费福利视频| 免费人成网站在线观看欧美高清| 婷婷成人综合| 欧美精品资源| 国精品产品一区| 国产精品久久国产愉拍| 日韩精品视频一区二区三区| 蜜桃视频免费观看一区| 亚洲午夜久久久久久尤物| 国产精品久久久久久久免费观看| 国产精品中文字幕制服诱惑| 日本在线不卡视频一二三区| 石原莉奈一区二区三区在线观看| 久久精品99久久无色码中文字幕| 精品视频91| 国产乱码精品| 国产三级一区| 国产亚洲电影| 国产欧美日韩精品一区二区三区| 亚洲精品国产精品粉嫩| 蜜桃视频一区二区三区| 亚洲一区二区三区久久久| 蜜臀av一区二区在线免费观看 | 亚洲一二av| 麻豆9191精品国产| 天堂成人免费av电影一区 | 精品少妇一区| 成人一区而且| 日韩欧美午夜| 欧美日韩在线播放视频| 欧美日韩高清| 亚洲视频www| 蜜臀精品久久久久久蜜臀| 一区二区三区网站| 日韩精品免费视频人成| 国产欧美一区二区三区国产幕精品| 欧美精品国产| 精品国产乱码久久久久久1区2匹| 精品国产99| 国产va在线视频| 午夜久久中文| 激情婷婷欧美| 久久亚洲二区| 啪啪亚洲精品| 国产一区二区三区视频在线| 香蕉成人av| 伊人久久亚洲影院| 日韩欧美中文字幕电影| 国产女人18毛片水真多18精品| 美女尤物国产一区| 三上悠亚国产精品一区二区三区| 午夜久久tv| 亚洲香蕉久久| 国产极品久久久久久久久波多结野| 国产精品片aa在线观看| 精品视频在线你懂得| 亚洲电影有码| 亚洲精选91| 精品亚洲二区| 免费精品国产的网站免费观看| 久久最新视频| 国产精品主播| 欧美精品日日操| 国产毛片一区| 国产精品宾馆| 亚洲国内精品| 亚洲日本免费电影| 国产一区二区三区四区大秀| 99久久夜色精品国产亚洲狼| 久久一二三区| 久久影院资源站| 亚洲国产不卡| 久久av综合| 欧美综合国产| 国产成人77亚洲精品www| 99日韩精品| 欧美极品中文字幕| 伊人精品在线| 国产成人调教视频在线观看| 视频一区欧美日韩| 中文在线资源| 欧美一级久久| 日韩视频免费| 国产成人免费精品| 亚洲一区二区小说| 另类专区亚洲| 日韩av资源网| 亚洲调教视频在线观看| 国产欧美日韩精品一区二区三区| 久久精品欧美一区| 国产美女撒尿一区二区| 一区二区视频欧美| 国产一区二区三区四区五区| 亚洲精品韩国| 91看片一区| 国产乱码精品一区二区三区四区| 亚洲精品99| 超碰99在线| 国产精品一区二区av交换| 在线看片不卡| 亚洲一级少妇| 美女性感视频久久| 日本一区免费网站| 日韩午夜av在线| 精品三级久久| 久久av网站| 日韩在线观看中文字幕| 亚洲精品中文字幕乱码| a天堂资源在线| 国产视频网站一区二区三区| 欧美专区在线| 久久久久一区| 精品欧美日韩精品| 欧美中文一区| 免费视频最近日韩| 欧美日韩黑人| 日韩中文影院| 91亚洲国产| 精品高清久久| 国产精品嫩模av在线| 色综合视频一区二区三区日韩 | 欧美成人精品三级网站| 国产欧美另类| 欧美天堂一区| 日本欧美一区二区在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅 | 精品不卡一区| 精品一区二区三区中文字幕在线| 欧美一区不卡| 久久国产人妖系列| 日本午夜精品| 国产欧美日韩影院| 久久狠狠亚洲综合| 日韩福利视频一区|