SSL
(安全套接层)是为网络通信提供安全及数据完整性的一种安
全协议,SSL在网络传输层对网络连接进行加密。
数字证书是公钥的载体,而密钥库可以包含公钥、私钥信息。
JKS和PKCS12都是比较常用的两种密钥库格式/标准
1.生成证书
使用SSL首先需要一个证书,这个证书既可以是自签名的,也可以是从SSL证书授权中
心获得的。
(考虑申请域名需要付款备案等,本文采用自签名方式)
每一个JDK或者JRE里都有一个工具keytool叫它是一个证书管理工具,可以用来生成
keyStoreType最常见的是JKS(默认)和PKCS12
keytool -genkey -alias tomat
配置
server.post = 8080
server.ssl.key-store = .keystore
server.ssl.key-store-password=123456
server.ssl.keyStoreType = JKS
server.ssl.keyAlias = tomat
启动成功但是访问不了
换另外一种方式:PKCS12
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
server.port:8443
server.ssl.key-store: keystore.p12
server.ssl.key-store-password: 123456
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat
实际项目中可以采用阿里云或者腾讯云ssl认证,要提前申请域名
2.http转向https
添加如下代码
@SpringBootApplication
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8089);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
}
输入
结果:http跳转到https 8089端口跳转到8443
补充:
还有一些其他密钥库类型,可能不常使用(取决于上下文),包括:
PKCS11 对于PKCS#11库,通常用于访问硬件加密令牌,但Sun提供程序实现也支持NSS存储。
BKS, 使用BouncyCastle提供程序(常用于Android)。
Windows-MY/ Windows-ROOT, 如果要直接访问Windows证书存储区。
KeychainStore,如果你想直接使用OSX钥匙串