这里进行的是本地的配置,如果是服务器的配置。步骤也一样。但是,一般服务器建议购买证书,或者申请免费的域名证书(需要域名 )。
本地配置的证书属于不安全的证书
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;
}
···