如何在springboot中生成https接口
生成https接口需要先有一个认证证书,其他的变化不大(注:这个适合安全性没有那么高的方案,毕竟本地的,正规的还需要域名生成证书操作)
1.找对地方执行keytool
找到自带的java位置,例如我的C:\Java\bin,在这里打开命令行,不要去执行keytool.exe文件,没有用
2. 输入指令
keytool -genkeypair -alias bxgd -keystore C:\Users\Administrator\Desktop\ssl\bxgd.jks -keypass bxzn1234 -storetype JKS -storepass bxzn1234 -keyalg RSA -keysize 2048 -validity 3650
注意一下别名叫啥 还有密码 (我这里是bxgd,密码bxzn1234) 位置自己选个位置,也就是说alias 后面是别名,keystore是文件生成位置,storetype 是文件格式,注意要和文件一个后缀,storepass 是密码,validity 是有效期
还有一件事
jdk8以前的用jsk文件,包括jdk8,以后的后缀改成.PKCS12文件,也就是jdk8以后的这样搞
keytool -genkeypair -alias bxgd -keystore C:\Users\Administrator\Desktop\ssl\bxgd.pkcs12 -keypass bxzn1234 -storetype PKCS12 -storepass bxzn1234 -keyalg RSA -keysize 2048 -validity 3650
3.文件塞入
生成bxgd.jks文件,把这个文件放到resources下面
4.设置配置
配置文件,也就是上图框起来的文件上面一个application文件添加一些配置启用https
server.port=8080
server.ssl.enabled=true
server.ssl.key-store-type=JKS
server.ssl.key-store-password=bxzn6666
server.ssl.key-store=classpath:bxgd.jks
5.clean文件
记得clean文件,不然
最后重启项目,http已经无法访问了
https可以
补充:
最近一开始在研究如何转为https,后来发现我原本的项目由websocket连接,由于改成了https,那websocket就连不上去了,所以在这里就有两种方案:
1.不完全启用http连接
这就相当于把以前的http重新拿起来用,http是用的一个端口,https也是用一个端口,两者都可以用:
那么我们需要的步骤由以前三步:
1.重新生成信任文件
因为要方ip通行,所以上面生成文件的步骤一样,只不过
keytool -genkeypair -alias bxgd -keystore C:\Users\Administrator\Desktop\ssl\bxgd.jks -keypass bxzn1234 -storetype JKS -storepass bxzn1234 -keyalg RSA -keysize 2048 -validity 3650
要变成
keytool -genkeypair -alias bxgd -keystore C:\Users\Administrator\Desktop\ssl\bxgd.jks -keypass bxzn1234 -storetype JKS -storepass bxzn1234 -keyalg RSA -keysize 2048 -validity 3650 -ext SAN=IP:127.0.0.1
这个-ext SAN=IP:127.0.0.1的ip你们用自己的,别和我一样,我这里只是测试
2.配置设置
之前有说过,要配置文件在application文件里面:
做了可以跳过
3.配置 HTTP 连接器
可以在文件下新建一个HttpConfig配置文件
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HttpConfig {
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createHttpConnector());
return tomcat;
}
private Connector createHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8443); // HTTP 端口
connector.setSecure(false);
return connector;
}
}
最后试一下,两个都可以了