From a08bc5fd5112cae1a0a18d61e9497346f28ad351 Mon Sep 17 00:00:00 2001 From: "Yangkai.Shen" <237497819@qq.com> Date: Sat, 20 Aug 2022 13:59:37 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=85=B6=E4=BB=96=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=B9=8B=20https=20=E6=A1=88=E4=BE=8B=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-https/.gitignore | 31 ----- demo-https/README.md | 110 --------------- demo-https/src/main/resources/application.yml | 11 -- demo-https/src/main/resources/server.keystore | Bin 2255 -> 0 bytes demo-https/ssl.png | Bin 78633 -> 0 bytes demo-others/demo-others-https/README.md | 148 +++++++++++++++++++++ .../demo-others-https}/pom.xml | 22 +-- .../java/com/xkcoding/https/HttpsApplication.java | 4 +- .../com/xkcoding/https/config/HttpsConfig.java | 4 +- .../src/main/resources/application.yml | 13 ++ .../src/main/resources/spring-boot-demo.key | Bin 0 -> 2812 bytes .../src/main/resources/static/index.html | 4 +- .../com/xkcoding/https/HttpsApplicationTests.java | 4 +- demo-others/pom.xml | 4 + pom.xml | 1 - 15 files changed, 184 insertions(+), 172 deletions(-) delete mode 100644 demo-https/.gitignore delete mode 100644 demo-https/README.md delete mode 100644 demo-https/src/main/resources/application.yml delete mode 100644 demo-https/src/main/resources/server.keystore delete mode 100644 demo-https/ssl.png create mode 100644 demo-others/demo-others-https/README.md rename {demo-https => demo-others/demo-others-https}/pom.xml (78%) rename demo-https/src/main/java/com/xkcoding/https/SpringBootDemoHttpsApplication.java => demo-others/demo-others-https/src/main/java/com/xkcoding/https/HttpsApplication.java (72%) rename {demo-https => demo-others/demo-others-https}/src/main/java/com/xkcoding/https/config/HttpsConfig.java (95%) create mode 100644 demo-others/demo-others-https/src/main/resources/application.yml create mode 100644 demo-others/demo-others-https/src/main/resources/spring-boot-demo.key rename {demo-https => demo-others/demo-others-https}/src/main/resources/static/index.html (61%) rename demo-https/src/test/java/com/xkcoding/https/SpringBootDemoHttpsApplicationTests.java => demo-others/demo-others-https/src/test/java/com/xkcoding/https/HttpsApplicationTests.java (69%) diff --git a/demo-https/.gitignore b/demo-https/.gitignore deleted file mode 100644 index a2a3040..0000000 --- a/demo-https/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/** -!**/src/test/** - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ - -### VS Code ### -.vscode/ diff --git a/demo-https/README.md b/demo-https/README.md deleted file mode 100644 index 042cb6f..0000000 --- a/demo-https/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# spring-boot-demo-https - -> 此 demo 主要演示了 Spring Boot 如何集成 https - -## 1. 生成证书 - -首先使用 jdk 自带的 keytool 命令生成证书复制到项目的 `resources` 目录下(生成的证书一般在用户目录下 C:\Users\Administrator\server.keystore) - -> 自己生成的证书浏览器会有危险提示,去ssl网站上使用金钱申请则不会 - -![ssl 命令截图](ssl.png) - -## 2. 添加配置 - -1. 在配置文件配置生成的证书 - -```yaml -server: - ssl: - # 证书路径 - key-store: classpath:server.keystore - key-alias: tomcat - enabled: true - key-store-type: JKS - #与申请时输入一致 - key-store-password: 123456 - # 浏览器默认端口 和 80 类似 - port: 443 -``` - -2. 配置 Tomcat - -```java -/** - *

- * HTTPS 配置类 - *

- * - * @author yangkai.shen - * @date Created in 2020-01-19 10:31 - */ -@Configuration -public class HttpsConfig { - /** - * 配置 http(80) -> 强制跳转到 https(443) - */ - @Bean - public Connector connector() { - Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); - connector.setScheme("http"); - connector.setPort(80); - connector.setSecure(false); - connector.setRedirectPort(443); - return connector; - } - - @Bean - public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) { - 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(connector); - return tomcat; - } -} -``` - -## 3. 测试 - -启动项目,浏览器访问 http://localhost 将自动跳转到 https://localhost - -## 4. 参考 - -- `keytool`命令参考 - -```bash -$ keytool --help -密钥和证书管理工具 - -命令: - - -certreq 生成证书请求 - -changealias 更改条目的别名 - -delete 删除条目 - -exportcert 导出证书 - -genkeypair 生成密钥对 - -genseckey 生成密钥 - -gencert 根据证书请求生成证书 - -importcert 导入证书或证书链 - -importpass 导入口令 - -importkeystore 从其他密钥库导入一个或所有条目 - -keypasswd 更改条目的密钥口令 - -list 列出密钥库中的条目 - -printcert 打印证书内容 - -printcertreq 打印证书请求的内容 - -printcrl 打印 CRL 文件的内容 - -storepasswd 更改密钥库的存储口令 - -使用 "keytool -command_name -help" 获取 command_name 的用法 -``` - -- [Java Keytool工具简介](https://blog.csdn.net/liumiaocn/article/details/61921014) diff --git a/demo-https/src/main/resources/application.yml b/demo-https/src/main/resources/application.yml deleted file mode 100644 index 21ad6fc..0000000 --- a/demo-https/src/main/resources/application.yml +++ /dev/null @@ -1,11 +0,0 @@ -server: - ssl: - # 证书路径 - key-store: classpath:server.keystore - key-alias: tomcat - enabled: true - key-store-type: JKS - #与申请时输入一致 - key-store-password: 123456 - # 浏览器默认端口 和 80 类似 - port: 443 diff --git a/demo-https/src/main/resources/server.keystore b/demo-https/src/main/resources/server.keystore deleted file mode 100644 index a6b59ffd9cdb35963cb3374ffdfd1e42fe3c151e..0000000000000000000000000000000000000000 GIT binary patch literal 0 KcmV+b0RR6000031 literal 2255 zcmV;=2r&2l?f&fm00062000310003126S(2V_|dv00D28imiqK00jXsf&~3A4h9M< z1_1;CDgqG!0R;dAf&}Swj_D63QR=C8oDOF!(Yjs*p;b7qyA_!{G!_V0^dC5mhhVw8 zH8pT}=yl4KZDXLNU{jz08X;^uDo;tcz)>}#6M#<6jJ}@EZ&smA4$nhlYZ!B^ns)4ugMPg8sL_v1^Y`z+!g1mq@Ur}y+hx&;Ht$@N-64(Iu%cAoo28;r zmE)|KiUgTv9v!F??9Q%s3h?rME<<2qf30U96=ZXmbA=lVYuzA@oxj(YY2_$H0Li3N z)LJz1ehBC6@53VR8?UayL$oc~#nVmnRwH0ZB@&WGLe>KCyn$3wLIQ@JZDgC2j$`gw z?$w5)z??H6g$ZbgywiQQJnjo|694TH%ocomp7OWWPk>kp`3k|qxZ1Lsk-Pz3q6Pn= zH`SET{aoWIYPq=pnubGTwqiN=C5(*s3dA+OJu{=Fc#lYXGOSMknPmpcAJ(lNXU8BfYnk7QvEXStre~kM!qj9jP_Ag-j zEFl1z@K$Q>BB-oy>k>VT90kA%?e%3?Zg^n6fTZbIX1UgZbZHQ6mXYfU2W`fQ z9KC9EK}I(e7T$jy7P|D8WP$4Rz zuVAj%Wm2Uku*-lSP5e5R8Lz}WvqacnuO9f6ZmbX55=yN;5_=OC`VvFb+@Ncwm9Dy` zkUxuKC8D2zFL0XjOJo6}SgWDH5l$fp0000100mesH842<00W0Gf&+svf&y!x0|Eg8 z0t5;_qKz;O1_>&LNQUvX>MUL5HJn~162eF69;N( zVQy!5X)zHn4+aBO1P2ocZeea?Xkl(=F%vKm1_MvX>MUL5HJn~162eF69;N(VQy!5X)zHn z4+aBO1P2ocZeea?Xkl(=F%vKm1_M7mhGqRC%b>cE8$)Yf!dLZj+N@3Qb+y?j>n@WJjsX5Z}*(+6*D>V=x&+>bG z8ubDL0RRD`Aut~>9R>qc9S#H*1QY=ADRgxG4<&LNQUKck)H8xZck4Mj;k@$LF zx_{zFOY7ydvyrYq{*W7W!(XX;lb^{mE0m~oZ6%HX7=}xWrQ>{jDYsrQaB}ptSMPu1 z`!+?rGfgmAZZ`G}jzPKe-<>yFyBZM!`dN!!4m)Wy`Mj1zD9?bf=^GsSwp$&zckd@- z++QOXFhNEegpYS>mLG$BaDOx)GSijA8>T2`EM79r(@U{C3-6Q;bx|z;+(XgBOw-!n ds{Wb@?)Uy9cwtgq9X1pzqFgNuy}i8Jdpc#5*qQ(U diff --git a/demo-https/ssl.png b/demo-https/ssl.png deleted file mode 100644 index 6961426c908a8ddd10c49bf394a8e7354b1a9b26..0000000000000000000000000000000000000000 GIT binary patch literal 0 KcmV+b0RR6000031 literal 78633 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 此 demo 主要演示了 Spring Boot 如何集成 https + +### 1.开发步骤 +#### 1.1.添加依赖 + +```xml + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + +``` + +#### 1.2.生成证书 + +首先使用 jdk 自带的 keytool 命令生成证书复制到项目的 `resources` 目录下 + +```bash +$ keytool -genkey -alias spring-boot-demo -keyalg RSA -validity 3650 -keystore ./spring-boot-demo.key +输入密钥库口令: +您的名字与姓氏是什么? + [Unknown]: xkcoding +您的组织单位名称是什么? + [Unknown]: spring-boot-demo +您的组织名称是什么? + [Unknown]: spring-boot-demo +您所在的城市或区域名称是什么? + [Unknown]: Hangzhou +您所在的省/市/自治区名称是什么? + [Unknown]: Zhejiang +该单位的双字母国家/地区代码是什么? + [Unknown]: CN +CN=xkcoding, OU=spring-boot-demo, O=spring-boot-demo, L=Hangzhou, ST=Zhejiang, C=CN是否正确? + [否]: y + +正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 3,650 天): + CN=xkcoding, OU=spring-boot-demo, O=spring-boot-demo, L=Hangzhou, ST=Zhejiang, C=CN +``` + +#### 1.3.添加配置 + +1. 在配置文件配置生成的证书 + +```yaml +server: + ssl: + # 证书路径 + key-store: classpath:spring-boot-demo.key + key-alias: spring-boot-demo + enabled: true + key-store-type: JKS + # 与申请时输入一致 + key-store-password: 123456 + # 浏览器默认端口 和 80 类似 + port: 8443 + servlet: + context-path: /demo + +``` + +2. 配置 Tomcat + +```java +@Configuration +public class HttpsConfig { + /** + * 配置 http(80) -> 强制跳转到 https(443) + */ + @Bean + public Connector connector() { + Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); + connector.setScheme("http"); + connector.setPort(8080); + connector.setSecure(false); + connector.setRedirectPort(8443); + return connector; + } + + @Bean + public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) { + 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(connector); + return tomcat; + } +} +``` + +### 2.测试 + +启动 `HttpsApplication`,浏览器访问 `http://localhost:8080/demo/` 将自动跳转到 `https://localhost:8443/demo/` ,同时浏览器地址栏前面还会加一把小锁的标志,代表https已经生效。 + +> 注意: +> 1. 自己生成的证书浏览器会有危险提示,去ssl网站上使用金钱申请则不会 +> 2. Chrome 浏览器会因为证书不可信导致无法访问,因此测试请使用 FireFox 浏览器 + +### 3.参考 + +- `keytool`命令参考 + +```bash +$ keytool --help +密钥和证书管理工具 + +命令: + + -certreq 生成证书请求 + -changealias 更改条目的别名 + -delete 删除条目 + -exportcert 导出证书 + -genkeypair 生成密钥对 + -genseckey 生成密钥 + -gencert 根据证书请求生成证书 + -importcert 导入证书或证书链 + -importpass 导入口令 + -importkeystore 从其他密钥库导入一个或所有条目 + -keypasswd 更改条目的密钥口令 + -list 列出密钥库中的条目 + -printcert 打印证书内容 + -printcertreq 打印证书请求的内容 + -printcrl 打印 CRL 文件的内容 + -storepasswd 更改密钥库的存储口令 + -showinfo 显示安全相关信息 + +使用 "keytool -?, -h, or --help" 可输出此帮助消息 +使用 "keytool -command_name --help" 可获取 command_name 的用法。 +使用 -conf 选项可指定预配置的选项文件。 +``` + +- [Java Keytool工具简介](https://blog.csdn.net/liumiaocn/article/details/61921014) diff --git a/demo-https/pom.xml b/demo-others/demo-others-https/pom.xml similarity index 78% rename from demo-https/pom.xml rename to demo-others/demo-others-https/pom.xml index c603394..dfb3519 100644 --- a/demo-https/pom.xml +++ b/demo-others/demo-others-https/pom.xml @@ -1,23 +1,21 @@ - 4.0.0 - - demo-https - 0.0.1-SNAPSHOT - demo-https - Demo project for Spring Boot - com.xkcoding - spring-boot-demo + demo-others 1.0.0-SNAPSHOT + 4.0.0 + + demo-others-https + 0.0.1-SNAPSHOT + demo-others-https + Demo project for Spring Boot + - UTF-8 - UTF-8 - 1.8 + 17 @@ -25,6 +23,7 @@ org.springframework.boot spring-boot-starter-web + org.springframework.boot spring-boot-starter-test @@ -33,6 +32,7 @@ + demo-others-https org.springframework.boot diff --git a/demo-https/src/main/java/com/xkcoding/https/SpringBootDemoHttpsApplication.java b/demo-others/demo-others-https/src/main/java/com/xkcoding/https/HttpsApplication.java similarity index 72% rename from demo-https/src/main/java/com/xkcoding/https/SpringBootDemoHttpsApplication.java rename to demo-others/demo-others-https/src/main/java/com/xkcoding/https/HttpsApplication.java index 2f7dd0a..41695fd 100644 --- a/demo-https/src/main/java/com/xkcoding/https/SpringBootDemoHttpsApplication.java +++ b/demo-others/demo-others-https/src/main/java/com/xkcoding/https/HttpsApplication.java @@ -12,10 +12,10 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @date Created in 2020-01-12 10:31 */ @SpringBootApplication -public class SpringBootDemoHttpsApplication { +public class HttpsApplication { public static void main(String[] args) { - SpringApplication.run(SpringBootDemoHttpsApplication.class, args); + SpringApplication.run(HttpsApplication.class, args); } } diff --git a/demo-https/src/main/java/com/xkcoding/https/config/HttpsConfig.java b/demo-others/demo-others-https/src/main/java/com/xkcoding/https/config/HttpsConfig.java similarity index 95% rename from demo-https/src/main/java/com/xkcoding/https/config/HttpsConfig.java rename to demo-others/demo-others-https/src/main/java/com/xkcoding/https/config/HttpsConfig.java index 239227a..c883d8d 100644 --- a/demo-https/src/main/java/com/xkcoding/https/config/HttpsConfig.java +++ b/demo-others/demo-others-https/src/main/java/com/xkcoding/https/config/HttpsConfig.java @@ -25,9 +25,9 @@ public class HttpsConfig { public Connector connector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); - connector.setPort(80); + connector.setPort(8080); connector.setSecure(false); - connector.setRedirectPort(443); + connector.setRedirectPort(8443); return connector; } diff --git a/demo-others/demo-others-https/src/main/resources/application.yml b/demo-others/demo-others-https/src/main/resources/application.yml new file mode 100644 index 0000000..ec25d00 --- /dev/null +++ b/demo-others/demo-others-https/src/main/resources/application.yml @@ -0,0 +1,13 @@ +server: + ssl: + # 证书路径 + key-store: classpath:spring-boot-demo.key + key-alias: spring-boot-demo + enabled: true + key-store-type: JKS + # 与申请时输入一致 + key-store-password: 123456 + # 浏览器默认端口 和 80 类似 + port: 8443 + servlet: + context-path: /demo diff --git a/demo-others/demo-others-https/src/main/resources/spring-boot-demo.key b/demo-others/demo-others-https/src/main/resources/spring-boot-demo.key new file mode 100644 index 0000000000000000000000000000000000000000..1b4f359b432a85c08114da09e393240fb178cfa3 GIT binary patch literal 2812 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 OeI5c`CFB_b0w)j;A_w*W literal 0 KcmV+b0RR6000031 diff --git a/demo-https/src/main/resources/static/index.html b/demo-others/demo-others-https/src/main/resources/static/index.html similarity index 61% rename from demo-https/src/main/resources/static/index.html rename to demo-others/demo-others-https/src/main/resources/static/index.html index 933c73e..c73de3b 100644 --- a/demo-https/src/main/resources/static/index.html +++ b/demo-others/demo-others-https/src/main/resources/static/index.html @@ -1,8 +1,8 @@ - - spring boot demo https + + spring boot demo https

diff --git a/demo-https/src/test/java/com/xkcoding/https/SpringBootDemoHttpsApplicationTests.java b/demo-others/demo-others-https/src/test/java/com/xkcoding/https/HttpsApplicationTests.java similarity index 69% rename from demo-https/src/test/java/com/xkcoding/https/SpringBootDemoHttpsApplicationTests.java rename to demo-others/demo-others-https/src/test/java/com/xkcoding/https/HttpsApplicationTests.java index b8b343e..aee47fb 100644 --- a/demo-https/src/test/java/com/xkcoding/https/SpringBootDemoHttpsApplicationTests.java +++ b/demo-others/demo-others-https/src/test/java/com/xkcoding/https/HttpsApplicationTests.java @@ -1,10 +1,10 @@ package com.xkcoding.https; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class SpringBootDemoHttpsApplicationTests { +class HttpsApplicationTests { @Test void contextLoads() { diff --git a/demo-others/pom.xml b/demo-others/pom.xml index 63c4e35..dd4660a 100644 --- a/demo-others/pom.xml +++ b/demo-others/pom.xml @@ -18,4 +18,8 @@ 17 + + demo-others-https + + diff --git a/pom.xml b/pom.xml index e0059ad..c0fa61a 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,6 @@ -