概述
此篇博文记录了在web程序中使用自签名的SSL(HTTPS)证书及创建SSL认证。
SSL关键的配置
Spring Boot中HTTPS的配置(application.properties)
server.port=8443
server.ssl.key-alias=selfsigned_localhost_sslserver
server.ssl.key-password=changeit
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS
将HTTP重定向到HTTPS
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
基本概念
SSL:安全套接字层(Secure Sockets Layer)。此协议用于两个系统网络连接和传输时对数据的加密。传输过程中防止了黑客的读取和窜改。
TLS:传输层安全(Transport Layer Security)相对于SSL更加的安全,相当于SSL的升级版。目前所有的ca(certificate authorities)机构都是基于TLS的,但是目前在互联网上SSL更加流行。
HTTPS:超文本传输协议安全(Hyper Text Transfer Protocol Secure)在web网站上使用了SSL。这样会比HTTP更加安全。
信任库及密钥库(Truststore and Keystore):这两个库都是存储了SSL证书。truststore存储了公钥信息,keystore存储私钥信息。
下面是创建自签名证书
keytool -genkey -alias selfsigned_localhost_sslserver -keyalg RSA -keysize 2048 -validity 700 -keypass changeit -storepass changeit -keystore ssl-server.jks
解析下:
-genkey:生成证书;
-alias selfsigned_localhost_sslserver:设置证书的别名;
-keyalg RSA -keysize 2048 -validity 700:truststore和keystore的密码;
-keystore ssl-server.jks:存储密钥的文件。其中JKS的含义是Java Key Store
执行完上面的代码后,会询问一些问题如下:
查看jks中的证书信息:
下面是关于程序方面的内容
添加RESTful接口
@RestController
class SecuredServerController{
@RequestMapping("/secured")
public String secured(){
System.out.println("Inside secured()");
return "Hello user !!! : " + new Date();
}
}
将ssl-server.jks放到resources中在application.properties中配置如下:
server.port=8443
server.ssl.key-alias=selfsigned_localhost_sslserver
server.ssl.key-password=changeit
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS
这样Spring Boot就配置好HTTPS了
url输入https://localhost:8443/secured
就进入了https站点了
将HTTP重定向到HTTPS
将8080端口重定向到8443上面:
@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(redirectConnector());
return tomcat;
}
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
源码打包下载地址:
https://github.com/fengfanchen/Java/tree/master/ssl-server
最后
以上就是花痴水蜜桃为你收集整理的Java笔记-Spring Boot SSL(https)实例的全部内容,希望文章能够帮你解决Java笔记-Spring Boot SSL(https)实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复