docker中运行的springboot项目安装SSL证书并配置服务器
申请SSL证书并下载
- 根据https://cloud.tencent.com/document/product/400/6814可以在腾讯云申请到SSL证书
- 之后在SSL证书控制台下载证书
- 我这里分别申请了两个证书,分别下载Tomcat形式和nginx的,tomcat类型的用来配置springboot项目,而nginx用来配置服务器
配置springboot项目
- 解压下载的tomcat-jks类型的证书如下图
- 之后将eryoyoyo.xyz.jks文件复制到项目的resources文件夹下
- 配置application.properties文件
server.port = 443
server.ssl.key-store=classpath:eryoyo.xyz.jks
# 复制keystorePass里面的内容
server.ssl.key-store-password=xxx
- 在项目的入口处添加下面的代码
@Value("${server.port}")Integer port;@BeanpublicServletWebServerFactoryservletContainer(){TomcatServletWebServerFactory tomcat=newTomcatServletWebServerFactory(){@OverrideprotectedvoidpostProcessContext(Context context){SecurityConstraint constraint=newSecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");SecurityCollection collection=newSecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);}};
tomcat.addAdditionalTomcatConnectors(httpConnector());return tomcat;}@BeanpublicConnectorhttpConnector(){Connector connector=newConnector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");// Connector监听的http的端口号
connector.setPort(80);
connector.setSecure(false);// 监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(port);return connector;}
- 此时运行之后访问https://localhost可以访问页面
- 按照之前的在服务器部署springboot的博客部署在服务器上,但是有一点不同的是docker容器运行的时候需要开启两个端口映射,一个对应443(https),一个对应80(http)
配置服务器上面的nginx
- 将之前下载的nginx类型的证书解压
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-riO7SOfG-1650876934404)(…/pic/image-20220404114209063.png)]
- 将eryoyo.xyz_bundle.crt和eryoyoyo.xyz.key复制到服务器的nginx的conf文件夹下
- 编辑nginx.conf文件,添加如下
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name eryoyo.xyz;
#证书文件名称
ssl_certificate eryoyo.xyz_bundle.crt;
#私钥文件名称
ssl_certificate_key eryoyo.xyz.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# location /upload {
# alias /home/lighthouse/blog/upload;
# }
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站运行目录在/etc/www下,则填写/etc/www。
# root html;
# 该端口号是服务器内部映射到宿主机的443对应端口号
proxy_pass https://eryoyo.xyz:端口号;
index index.html index.htm;
}
}
- 重新加载nginx配置文件之后运行容器,浏览器输入https://eryoyo.xyz即可成功访问