Springboot部署ssl证书开启https安全数据加密传输
更新中...
一、证书准备
关于证书的获取,你可以:
a. 使用jdk自带的证书生成工具keytool
。
b. 使用openss
l工具生成。
c. 到云平台
申请CA认证的ssl证书(推荐)。
1-1、通过云平台申请免费SSL证书
以腾讯云为例。
-
鼠标移动到左上角的云产品,在输入框中输入ssl,点击进入SSL证书页面;
-
选择
域名型免费版(DV)
,点击下面的0元 免费快速申请
;
-
提交资料:填写证书信息,至少需要填写绑定的
域名
和邮箱
,其他的选填,然后点击下一步;
-
验证方式:默认即可,会给你自动添加解析,直接点击下一步;
-
域名验证:CA会拿你的证书请求进行认证,需要等一会,大概10几分钟左右。
-
当CA机构签发后,我们可以在我的证书进行查看。
后续就可以拿申请到的证书进行部署了,腾讯云有自动部署服务,但是收费,所以我们需要下载下来,手动部署。
1-2、使用JDK的keytool生成证书
更新中...
1-3、使用OpenSSL工具生成证书
更新中...
二、配置证书
2-2、使用云平台申请的证书部署
先将云平台申请的证书下载下来,里面包含·Nginx·Tomcat·Apache·SSL的证书。
使用SSL证书进行部署
-
将SSL/
***.pfx
文件放到资源文件夹src/main/resources/
下;
比如我使用的是src/main/resources/langkye.cn.pfx
。 -
编写
application.yml
配置文件;
其他的不变,主要添加如下配置:server: port: 8095 #https端口 httpPort: 8059 #http端口 ssl: key-store: classpath:langkye.cn.pfx #证书路径,可以填写相对路径,也可以填写绝对路径 key-store-password: langkye.cn #证书密钥,填写你申请时填写的密钥,如果没有填写,会生成一个随机密钥保存在·keystorePass.txt·文件中,和pfx文件在同一目录中 keyStoreType: PKCS12 #密钥类型 enabled: true #开启ssl支持(默认true)
-
新建一个java配置类
SslConfig.java
;import com.alibaba.fastjson.JSONObject; import com.usrp.bpm.engine.BpmTest; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.ImportResource; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Properties; /** * @author langkye */ @Configuration public class SslConfig { @Value("${server.httpPort}") Integer httpPort; @Value("${server.port}") Integer httpsPort; @Bean public ServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint constraint = new SecurityConstraint(); constraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); constraint.addCollection(collection); context.addConstraint(constraint); } }; tomcat.addAdditionalTomcatConnectors(createHTTPConnector()); return tomcat; } private Connector createHTTPConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setProperty("relaxedQueryChars", "[]{}"); connector.setScheme("http"); connector.setSecure(false); // http 端口 connector.setPort(httpPort); // https端口 connector.setRedirectPort(httpsPort); return connector; } }
-
为了直观,在启动类中编写一个controller。
/** * @author langkye */ @SpringBootApplication @RestController @RequestMapping("/") public class Application{ public static void main(String[] args) { SpringApplication.run(Application.class, args); } @GetMapping("/index") public Object index(){ final Properties ps = System.getProperties(); final JSONObject result = new JSONObject(); //系统名称 result.put("os.name",ps.getProperty("os.name")); //系统架构 result.put("os.arch",ps.getProperty("os.arch")); //系统版本 result.put("os.version",ps.getProperty("os.version")); //当前登陆用户:用户主目录 result.put("user.home",ps.getProperty("user.home")); //当前登陆用户:用户名 result.put("user.name",ps.getProperty("user.name")); //当前登陆用户:语言 result.put("user.language",ps.getProperty("user.language")); //Java版本 result.put("java.version",ps.getProperty("java.version")); //Java安装目录 result.put("java.home",ps.getProperty("java.home")); //Java运行时名称 result.put("java.runtime.name",ps.getProperty("java.runtime.name")); //项目根目录对绝对路径 result.put("user.dir",ps.getProperty("user.dir")); //运行时Java版本 result.put("java.runtime.version",ps.getProperty("java.runtime.version")); //系统文件分隔符 result.put("file.separator",ps.getProperty("file.separator")); return result; } }
-
测试
启动项目后,在控制台可以看到,已经成功初始化了8095
和8059
两个端口
访问
https://localhost:8095/index
,由于localhost和证书的域名不匹配所以会警告,但是不难看出已经可以使用https进行传输数据了。
三、部署到服务器
-
极速体验
接下来就简单了,你只要在你的服务器中运行这个项目,通过域名如(https://www.langkye.cn:8095/index)来访问,一切都OK了~。1. 将你的项目打包,这里直接打jar包(ssl_deploy.1.0.0.jar)。 2. 使用你熟悉的工具将jar包上传到服务器。 比如:scp /Users/langkye/Development/Personal/ssl_deploy/target/ssl_deploy.1.0.0.jar root@www.langkye.cn:~/ 3. 在你的服务器中运行它。 比如:nohup java -jar ssl_deploy.1.0.0.jar >info.log 2>&1 & 4. 访问 https://www.langkye.cn:8095/index
3-1、项目打包
更新中...
3-2、上传项目打包文件到服务器
更新中...
3-3、基础环境搭建
更新中...
3-4、运行项目
更新中...