《Spring Boot(3) – springboot配置ssl改成https协议访问项目》

这里进行的是本地的配置,如果是服务器的配置。步骤也一样。但是,一般服务器建议购买证书,或者申请免费的域名证书(需要域名 )。

本地配置的证书属于不安全的证书

1、生成证书文件

利用jdk 里的工具keytool.exe来生成。

win+R 进入cmd     (如果没有配置jdk环境变量,需要cd到 jkd  下的  bin 目录 。毕竟环境变量配置了,可以在任意目录访问bin目录下的的文件,像java.exe 和  现在要使用的keytool)

D:\>keytool -genkeypair -alias "任意名称" -keyalg "RSA" -keystore "任意名称.keystore"

输入密钥库口令:                      #不可见,要记得。

再次输入新口令:

您的名字与姓氏是什么? [Unknown]: xxx

您的组织单位名称是什么? [Unknown]: xxx  

 您的组织名称是什么? [Unknown]: xxx   

 您所在的城市或区域名称是什么? [Unknown]: shanghai

您所在的省/市/自治区名称是什么? [Unknown]: xxx   

 该单位的双字母国家/地区代码是什么? [Unknown]: CN   

CN=chen, OU=xiaolong, O=xiaolong, L=shanghai, ST=sss, C=ss

是否正确? : Y                

以上输入可任意,但是要记住。代码写注释就行了。

Warning:JKS 密钥库使用专用格式。建议使用 "xxxxxxxxxx" 迁移到行业标准格式 PKCS12。

#   y后出现这样一行警告提示。可以复制它回车执行。但是此时keyStoreType 变成了JKS,并为你进行了一个备份

D:\>keytool -list -keystore test.keystore         #可进行查看

输入密钥库口令:  

密钥库类型: jks

密钥库提供方: SUN 



2、把对应生成的keystore文件放到项目resources 下

ps:你在哪里cmd  文件就会在哪里生成。桌面就是c盘 用户 目录 。也可以指定路径。在生成的时候吧“任意.keystore”  改为"D:\xxx\xxxx.keystore"


然后在application.yml 配置ssl





然后就可以正常访问项目了。




相关错误:Could not load key store 'classpath:

可以看出来,没有在对应目录找到  xxx.keystore进行key读取。这时候去target 目录 看看是否有 xxxx.keystore文件。如果没有,进行maven clean 重新编译,完成启动。



相关优化:

    配置自动用https访问项目。(即输出127.0.0.1/index 会自动添加https。而不是http,此时已经不能用http进行访问)

···

//下面是2.0的配置,1.x请搜索对应的设置

@Bean

public ServletWebServerFactoryservletWebServerFactory(){

TomcatServletWebServerFactory factory =new TomcatServletWebServerFactory(){

@Override

        protected void postProcessContext(Context context) {

SecurityConstraint securityConstraint =new SecurityConstraint();

            securityConstraint.setUserConstraint("CONFIDENTIAL");//机密的

            SecurityCollection securityCollection =new SecurityCollection();

            securityCollection.addPattern("/*");

            securityConstraint.addCollection(securityCollection);

            context.addConstraint(securityConstraint);

        }

};

    factory.addAdditionalTomcatConnectors(httpConnector());

    return factory;

}

@Bean

public ConnectorhttpConnector(){

Connector connector =new Connector("org.apache.coyote.http11.Http11NioProtocol");

    connector.setScheme("http");

    connector.setPort(8099);

    connector.setSecure(false);

    connector.setRedirectPort(8080);

    return  connector;

}

···

你可能感兴趣的:(《Spring Boot(3) – springboot配置ssl改成https协议访问项目》)