docker中运行的springboot项目安装SSL证书并配置服务器

2022-07-21 08:55:38

docker中运行的springboot项目安装SSL证书并配置服务器

申请SSL证书并下载

  • 根据https://cloud.tencent.com/document/product/400/6814可以在腾讯云申请到SSL证书
  • 之后在SSL证书控制台下载证书

image-20220404112215505

  • 我这里分别申请了两个证书,分别下载Tomcat形式和nginx的,tomcat类型的用来配置springboot项目,而nginx用来配置服务器

配置springboot项目

  • 解压下载的tomcat-jks类型的证书如下图

image-20220404112935713

  • 之后将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即可成功访问
  • 作者:尔呦
  • 原文链接:https://blog.csdn.net/weixin_44994838/article/details/124409165
    更新时间:2022-07-21 08:55:38