1.存在证书使用https
打开application.yml配置文件,添加server相关的ssl配置,如下代码:
server:
port: 8080
ssl:
key-store: classpath:tomcat.keystore #证书地址,可以是相对地址也可以是绝对地址
key-alias: tomcat # 生成证书时设置的别名
enabled: true #是否开启ssl
key-store-password: 123456 # 生成证书时设置的密码
此时启动项目就可以使用https访问了,这时是不能使用http访问的
2.https和https同时支持
在配置中定义一个http的端口配置
server:
port: 8080
httpport: 8088 #自定义参数为http端口
ssl:
key-store: classpath:tomcat.keystore #证书地址,可以是相对地址也可以是绝对地址
key-alias: tomcat # 生成证书时设置的别名
enabled: true #是否开启ssl
key-store-password: 123456 # 生成证书时设置的密码
新建一个配置类customserverconfig,读取server.httpport作为http端口
@configuration
public class customserverconfig {
@value("${server.httpport}")
private integer httpport;
/**
* 创建并配置servletwebserverfactory,主要用于初始化tomcat服务器配置。
*
* @return servletwebserverfactory 一个配置了额外tomcat连接器的tomcatservletwebserverfactory实例。
*/
public servletwebserverfactory serverfactory() {
// 创建tomcatservletwebserverfactory实例
tomcatservletwebserverfactory tomcat = new tomcatservletwebserverfactory();
// 添加额外的tomcat连接器
tomcat.addadditionaltomcatconnectors(createstandardconnector());
return tomcat;
}
/**
* 创建一个标准的connector实例,用于tomcat服务器接收http请求。
*
* @return connector 返回配置好的connector实例,它使用nio协议监听指定的http端口。
*/
private connector createstandardconnector() {
// 创建一个http11nioprotocol协议的connector实例
connector connector = new connector("org.apache.coyote.http11.http11nioprotocol");
// 设置connector监听的端口号
connector.setport(httpport);
return connector;
}
}
3.使用keytool命令行工具生成一个自签名的证书
keytool -genkeypair -alias tomcat -keyalg rsa -keysize 2048 -validity 365 -keystore tomcat.keystore -keypass changeit -storepass changeit -dname "cn=yourservername, ou=yourorganizationalunit, o=yourorganization, l=city, st=state, c=country"
4.导出公钥证书
keytool -exportcert -alias tomcat -file tomcat.crt -keystore tomcat.keystore -storepass changeit
5.将证书导入到java中,java程序就可以无改动访问当前证书的https服务
keytool -import -trustcacerts -file tomcat.crt -alias tomcat -keystore "%java_home%\jre\lib\security\cacerts" -storepass changeit
发表评论