https 模拟证书java_Springboot模拟https安全访问(使用Java提供的keytool命令生成证书)...

1、SpringBoot启动时默认采用http进行通信协议定义,但是为了访问安全性,我们有时候会选择使用https进行访问。正常来讲,https的访问是需要证书的,并且为了保证这个证书的安全,一定要在项目中使用CA进行认证,需要收费的哦,证书真是一个挣钱的生意。这里只是利用Java提供的keytool命令实现证书的生成。

2、如果想要使用keytool命令生成一个证书,这里先简单学习一下如何使用此命令,如下所示:

1 keytool -genkey -alias tomcat -keyalg RSA -keystore D:/tomcat.keystore -keypass 123456 -storepass 123456 -dname "CN=xingming,OU=danwei,O=zuzhi,L=shi,ST=sheng,C=CN"

2 keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/tomcat.keystore -keypass 123456 -storepass 123456 -dname "CN=xingming,OU=danwei,O=zuzhi,L=shi,ST=sheng,C=CN"

1)、-genkey 生成秘钥。

2)、-alias 别名。

3)、-keyalg 秘钥算法。

4)、-keysize 秘钥长度。

5)、-validity 有效期。

6)、-keystore 生成秘钥库的存储路径和名称。

7)、-keypass 秘钥口令。

8)、-storepass 秘钥库口令。

9)、-dname 拥有者信息,CN:姓名;OU:组织单位名称;O:组织名称;L:省/市/自治区名称;C:国家/地区代码。

如果想要,更多参数说明,执行命令:keytool -genkey -?。

d61f5676864100699068ad3d6ae955c0.png

3、查看证书的命令,如下所示:

1 keytool -list -keystore d:/tomcat.keystore -storepass 123456

2 keytool -list -v -keystore d:/tomcat.keystore -storepass 123456

3 keytool -list -rfc -keystore d:/tomcat.keystore -storepass 123456

1)、-list 列出秘钥库中的条目。

2)、-v 详细输出。

3)、-rfc 以RFC样式输出。

查看更多参数说明执行命令:keytool -list -?。

3b95d275cb0c0620e2ca2cb1e7271a4f.png

使用该命令生成证书,如下所示:

1 keytool -genkey -alias mytomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore D:/keystore.p12 -validity 3650 -keypass 123456 -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -storepass 123456

cb9c7e273f564774d5bcdfb7daad8a7a.png

执行完成后,会生成一个名称为keystore.p12的证书文件,该证书的别名为mytomcat,访问密码为123456。 将生成的keystore.p12复制到src/main/resources目录中。

4、修改application.yml文件,配置ssl安全访问,如下所示:

1 # https的端口号设置为4433,由于我的443端口被占用了,这里使用4433端口号。2 server.port=4433

3

4 # keystore配置文件路径5 server.ssl.key-store=classpath:keystore.p126 # keystore的类型7 server.ssl.key-store-type=PKCS128 # 设置的别名9 server.ssl.key-alias=mytomcat10 # 访问密码,秘钥口令11 server.ssl.key-password=123456

12 # 访问密码,秘钥库口令13 server.ssl.key-store-password=123456

修改pom.xml配置文件,资源目录中增加了*.p12文件,要想让其正常执行,还需要修改resource配置,追加输出文件类型配置。

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

5 https://maven.apache.org/xsd/maven-4.0.0.xsd">

6 4.0.0

7

8 org.springframework.boot

9 spring-boot-starter-parent

10 2.3.5.RELEASE

11

12

13 com.example

14 demo

15 0.0.1-SNAPSHOT

16 demo

17 Demo project for Spring Boot

18

19

20 1.8

21 3.1.1

22

23

24

25

26 org.springframework.boot

27 spring-boot-starter-web

28

29

30

31 org.springframework.boot

32 spring-boot-starter-test

33 test

34

35

36 org.junit.vintage

37 junit-vintage-engine

38

39

40

41

42

43

44

45

46 org.springframework.boot

47 spring-boot-maven-plugin

48

49

50

51

52 src/main/resources

53

54 **/*.properties55 **/*.yml

56 **/*.xml57 **/*.p12

58

59

60

61

62

63

此时,现在的程序中配置了https支持,但考虑到用户访问时如果使用http访问,所以需要做一个Web配置,使得通过http的80端口访问的请求直接映射到https的443端口上。Spring Boot2.x 中使用TomcatServletWebServerFactory进行接口访问转发。

1 package com.demo.config;2

3 import org.apache.catalina.Context;4 import org.apache.catalina.connector.Connector;5 import org.apache.tomcat.util.descriptor.web.SecurityCollection;6 import org.apache.tomcat.util.descriptor.web.SecurityConstraint;7 import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;8 import org.springframework.context.annotation.Bean;9 import org.springframework.context.annotation.Configuration;10

11 /**12 * 此类专门用来负责http连接的相关配置13 *14 * @author15 *16 */

17 @Configuration18 public classHttpConnectorConfig {19

20 /**21 *22 * @return23 */

24 publicConnector initConnector() {25 Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");26 //如果现在用户使用普通的http方式进行访问

27 connector.setScheme("http");28 //用户访问的端口号是8080

29 connector.setPort(8080);30 //如果该连接为跳转,则表示不是一个新的连接对象

31 connector.setSecure(false);32 //设置转发操作端口号

33 connector.setRedirectPort(4433);34 returnconnector;35 }36

37 @Bean38 publicTomcatServletWebServerFactory servletContainerFactory() {39 TomcatServletWebServerFactory factory = newTomcatServletWebServerFactory() {40

41 /**42 * 该方法主要进行请求处理的上下文配置, 定义新的安全访问策略。43 */

44 @Override45 protected voidpostProcessContext(Context context) {46 //该方法主要进行请求处理的上下文配置, 定义新的安全访问策略。

47 SecurityConstraint securityConstraint = newSecurityConstraint();48 //定义用户访问约束要求

49 securityConstraint.setUserConstraint("CONFIDENTIAL");50 SecurityCollection collection = newSecurityCollection();51 //匹配所有的访问映射路径

52 collection.addPattern("/*");53 //最佳路径映射访问配置

54 securityConstraint.addCollection(collection);55 context.addConstraint(securityConstraint);56 }57 };58

59 //连接初始化配置

60 factory.addAdditionalTomcatConnectors(this.initConnector());61 returnfactory;62 }63

64 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值