Spring boot + Undertow + 腾讯云https证书配置SSL访问项目( 多个项目使用SSL也可以,需要利用Nginx )

tomcat的https配置和undertow差不多的,由于 spring boot + undertow + https的配置资料比较缺少,这里写一篇文章

1.单个主机上配置
  • 先在pom.xml加入undertow容器依赖
<!--undertow web容器-->  
 <dependency>  
     <groupId>org.springframework.boot</groupId>  
     <artifactId>spring-boot-starter-undertow</artifactId>  
 </dependency> 
  • 在腾讯云后台下载好免费的证书,下载后,在本地的解压目录找到tomcat包
    这里写图片描述
    其中kdystorePass.txt为证书密码

  • 在application.yml中设置SSL配置信息

server:
    #web容器的SSL端口,不能删除
    port: 443
    #自定义声明http的端口,将在配置代码使用
    http-port: 8070
    ssl:
    #指定证书的位置,把证书copy到/resource/config的目录下
    key-store: classpath:config/youconfig.jks
    #证书密钥,文件kdystorePass.txt的内容
    key-password: 123456 
  • 在java代码配置undow
import io.undertow.servlet.api.SecurityConstraint;
import io.undertow.servlet.api.SecurityInfo;
import io.undertow.servlet.api.TransportGuaranteeType;
import io.undertow.servlet.api.WebResourceCollection;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.undertow.UndertowBuilderCustomizer;
import org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class UndertowConfig {
    @Value("${server.http-port}")
    private int httpPort;
    @Value("${server.port}")
    private int httpsPort;

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        UndertowEmbeddedServletContainerFactory undertowFactory = new UndertowEmbeddedServletContainerFactory();
        //监听http端口
        undertowFactory.addBuilderCustomizers((UndertowBuilderCustomizer) builder -> builder.addHttpListener(httpPort, "0.0.0.0"));
        //将http的8070端口重定向到https的端口上
        undertowFactory.addDeploymentInfoCustomizers(deploymentInfo -> {
        deploymentInfo.addSecurityConstraint(new SecurityConstraint()
            .addWebResourceCollection(new WebResourceCollection()
            .addUrlPattern("/*")) .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL)
            .setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT))
            .setConfidentialPortManager(exchange -> httpsPort);
        });
        return undertowFactory;
    }
} 

最后启动项目访问即可。

2.若在同一主机上,结合Nginx对有两个(或多个)Spring boot + Undertow 项目配置SSL

由于443端口只有一个,这里需Nginx端口转发辅助

  • 在服务器搞一个Nginx,并配置两个不同的子域名

    A.host.com 、B.host.com

  • 在腾讯云申请两个子域名的免费证书并下载,下载后,在本地的解压目录找到Nginx包

这里写图片描述 这里写图片描述
把A和B的证书文件都上传到服务器 路径为/usr/ssl/

  • 基于案例1基础上,A和B先配置好项目的SSL证书(先测试启动是否正常),并对A、B项目配置不同的SSL端口

请针对A项目修改application.yml的配置server.port为8443(自定义)
请针对B项目修改application.yml的配置server.port为7443(自定义)

  • Nginx配置如下
server {
    listen 443 ssl;
    server_name A.host.com;
    ssl on;
    # A项目的证书路径
    ssl_certificate "/usr/ssl/A_bundle.crt";
    ssl_certificate_key "/usr/ssl/A.key";
    location / {
        #对应项目修改的端口和域名
        proxy_pass https://A.host.com:8443;
    }
}
server {
    listen 443 ssl;
    server_name B.host.com;
    ssl on;
    # B项目的证书路径
    ssl_certificate "/usr/ssl/B_bundle.crt";
    ssl_certificate_key "/usr/ssl/B.key";
    location / {
        #对应项目修改的端口和域名
        proxy_pass https://B.host.com:7443 ;
    }
} 
  • 启动Nginx + A、B项目

注意:多个项目配置SSL,需要A,B项目内嵌容器配置SSL(指定Tomcat的版本证书),Nginx也需要配置SSL(指定Nginx的版本证书),项目使用的证书和Nginx使用的是不一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值