Spring Boot应用程序如何配置 HTTPS 访问方式

在 Spring Boot 应用程序中配置 HTTPS 访问方式可以根据你是否拥有由受信任的证书颁发机构(CA)签发的证书来分为两种情况:使用自签名证书和使用 CA 签发的证书。下面我将分别介绍这两种情况的配置方法:

使用自签名证书

如果你还没有有效的 SSL/TLS 证书,可以选择生成一个自签名证书。这种证书不由 CA 签发,适用于测试和开发环境。

  1. 生成自签名证书: 使用 keytool 生成自签名证书和密钥库(.jks.p12):

    keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -keystore mykeystore.jks -validity 365 -storepass [密钥库密码] -keypass [密钥密码]
    
  2. 配置 Spring Boot: 在 application.propertiesapplication.yml 中配置 SSL:

    application.yml 示例:

    server:
      port: 8443
      ssl:
        key-store: classpath:mykeystore.jks
        key-store-password: [密钥库密码]
        keyStoreType: JKS
        keyAlias: myalias
    

    将密钥库放置在资源目录: 将 mykeystore.jks 文件放在项目的 src/main/resources 目录下。

使用 CA 签发的证书

如果你选择从 CA 获取证书,步骤会稍有不同。

  1. 从 CA 获取证书

    • 生成 CSR(证书签名请求)并提交给 CA。
    • 完成域名验证并从 CA 获取证书。
  2. 将证书转换为 KeyStore: 如果 CA 提供的证书不是在 KeyStore 格式,你需要将其转换为 .jks.p12 格式。使用 openssl 可以完成这个转换。

  3. 配置 Spring Boot: 和使用自签名证书时的配置类似,但密钥库的路径和密码将对应于从 CA 获得的证书。

    application.yml 示例:

    server:
      port: 8443
      ssl:
        key-store: classpath:keystore.p12
        key-store-password: [密钥库密码]
        keyStoreType: PKCS12
        keyAlias: myalias
    
  4. 将密钥库放置在资源目录: 将转换后的密钥库文件放在 src/main/resources 目录下。

共同步骤

  • 重启应用:重启 Spring Boot 应用以应用这些配置。
  • 测试 HTTPS 连接:确保应用程序现在可以通过 HTTPS 正确访问。

注意事项

  • 自签名证书不适用于生产环境,因为它们不被用户浏览器信任。
  • 使用 CA 签发的证书适用于生产环境,可以提供更高的安全性和用户信任度。
  • 保护你的密钥库和私钥文件,不要公开它们。
  • 对于生产环境,你可能还需要考虑其他安全措施,如配置 HTTP 到 HTTPS 的重定向、启用 HSTS(HTTP Strict Transport Security)等。