目录
前言
因工作需要,需要配置ssl证书,所以在本地环境下实现一个demo,将http改为https访问,提高安全性
ssl证书是什么?
SSL证书和我们日常用的身份证类似,是一个支持HTTPS网站的身份证明,SSL证书里面包含了网站的域名,证书有效期,证书的颁发机构以及用于加密传输密码的公钥等信息,由于公钥加密的密码只能被在申请证书时生成的私钥解密,因此浏览器在生成密码之前需要先核对当前访问的域名与证书上绑定的域名是否一致,同时还要对证书的颁发机构进行验证,如果验证失败浏览器会给出证书错误的提示。
提示:证书对应域名跟服务器域名不一致也可实现https,但会提示连接不安全且需要接受风险后才可正常访问
一、准备域名
可以在阿里云购买域名,也可在其他网站购买,然后将域名解析到自己的服务器,这一步就不在阐述了,因为本人的本地环境为内网环境,所以后面用到了nat123来进行内网IP映射外网自定义域名,有需要的同学可以自行搜索一下
二、申请SSL证书
因为使用自签证书会提示不安全,且需要接受风险或跳过证书验证才能访问,所以我们这里使用的是阿里云的免费ssl证书
1、登陆阿里云找到ssl证书
2、选购免费单域名证书,阿里云的证书没人每年可购买一次免费证书
3、进入阿里云的工作台,找到自己的ssl证书,申请证书,证书申请需要填写一些信息
4、证书申请通过后点击下载,因为spring boot内嵌tomcat,所以这里下载tomcat版本就行
其他服务器类型下载,参考阿里云证书下载示例:
- 如果您的Web服务器类型是Apache Tomcat(支持配置PFX格式、JKS格式的证书),根据要配置的证书类型进行操作:
- 单击Tomcat后的下载,下载PFX格式的证书压缩包。
- 单击JKS后的下载,下载JKS格式的证书压缩包。
- 如果您的Web服务器类型是Apache(httpd)、Nginx、Internet Information Services(IIS),分别单击Apache、Nginx、IIS后的下载。
- 如果您的Web服务器类型不在Apache Tomcat、Apache(httpd)、Nginx、IIS范围,单击其他后的下载。
- 如果您需要将证书安装到阿里云产品上,推荐您使用证书部署功能。如果要安装证书的阿里云产品暂不支持证书部署,建议您下载适用于Nginx服务器的证书压缩包(即单击Nginx后的下载)。
- 如果您需要在App、Java等客户端上安装根证书,单击根证书下载后的下载。
5、证书下载后在自己的磁盘找到对应的压缩包,解压后会得到两个文件,.pfx结尾的证书文件和对应的证书密码文件
三、集成项目
1、集成项目,将pfx结尾的证书文件放入spring boot项目的resources目录下,并在yml文件中加以下配置
server:
port: 443
ssl:
key-store: classpath:xxxxxx_xxx.xxx.pfx
key-store-password: WT4hj0oz
keyStoreType: PKCS12
- key-store: 生成的证书文件的存储路径,其中xxxxxx_xxx.xxx.pfx 需要改为你刚刚复制进来的 .pfx 文件名
- key-store-password: 指定签名的密码,打开下载文件中 Tomcat 文件夹中的 txt 文件,即为此处填写的密码
- keyStoreType:为制定秘钥仓库的类型,这里我们需要填写为 PKCS12
因为https默认是443端口,所以这里的配置文件我们用的是443,那么待会儿访问项目的时候就可以不加端口号直接访问
2、配置完成后,即可通过域名访问自己的项目,因为项目中配置的是https默认端口443,所以可以直接通过域名访问
如上,就会发现网站使用的是https链接,有个安全锁的标志,并且点击锁会提示连接是安全的,证书有效。如果是自签证书虽然也是https连接,但是会提示连接不安全,证书无效
3、实现http、https均可访问,有些情况下,会使用http来访问我们的项目,为了是项目也可正常使用,我们可以配置http访问转https,http默认80端口,也可以根据自己需要配置任意端口
启动类加上配置:
@Bean
public Connector connector(){
Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector){
TomcatServletWebServerFactory tomcat=new TomcatServletWebServerFactory(){
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint=new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection=new SecurityCollection();
collection.addMethod(DEFAULT_PROTOCOL);
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}
这样,我们就实现了https、http 访问spring boot项目
总结
spring boot项目配置SSL证书,需要准备域名,ssl证书,将域名解析到自己的服务器,然后通过域名申请证书,再下载适配自己项目的证书文件,通过配置文件进行相应配置,就可以进行https访问了,总体比较简单。如果是服务器在内网环境的同学,可以考虑使用nat123进行内网映射外网域名,然后再在自己的域名里根据nat123的教程添加一条解析记录,就能完美解决了。