【问题标题】:Firebase truststore and setting up Spring to accept certificates from FirebaseFirebase 信任库并设置 Spring 以接受来自 Firebase 的证书
【发布时间】:2019-09-19 15:55:04
【问题描述】:

我有一个托管在 Firebase 中的 Angular PWA,并且我有一个正在尝试与之通信的 Spring 引导服务(目前在本地运行)。

出于好意,Firebase 会自动为托管应用创建 SSL 证书,因此这是安全的,并且只能通过 HTTPS 访问。

我无法解决的是如何设置我的 Spring 引导服务以接受/信任/允许这些连接,以便 PWA 可以进行基本的 REST 调用(我什至需要这样做吗?)。

我的第一个想法是将 Firebase 中的证书添加到 Spring Boot 信任库,但要么我做错了,要么这是错误的方法,因为我尝试过的所有操作都得到了 javax.net.ssl.SSLHandshakeException: no cipher suites in common

我运行的命令如下:

从 Angular 应用 URL 下载证书

keytool -printcert -sslserver app.example.com:443 -rfc > temp.cert

从该证书创建一个信任库

keytool -keystore truststore.jks -alias example.com -import -file temp.cert

然后我只是将它加载到我的 Spring boot application.yml 文件中

server:
  port: 8443
  ssl:
    key-store: classpath:truststore.jks
    key-password: secret
    key-alias: example.com

我不确定我是否完全错了,或者错过了重要的一步。

【问题讨论】:

  • 我来这里看看有什么不该做的,多亏了你的经验,我正打算做同样的事情,现在不行了:)

标签: spring firebase spring-boot ssl


【解决方案1】:

不幸的是,这种方法不起作用,但可能不是必需的。

您可能知道,SSL 使用“公钥加密”,它需要两个密钥:私钥公钥SSL 证书 基本上是 公钥 加上一些其他验证信息。

虽然我们可以像您一样使用keytool 提取SSL 证书,但这不会为我们提供关键的私钥。而且出于安全原因,可能无法从 Firebase 导出 私钥

那么有什么办法呢?

  1. 如果您只是在本地进行测试,那么要么只使用纯 HTTP(没有安全性,但您也不需要做任何事情)——或者使用 self-signed certificate。如果使用自签名证书,您可能还需要add the self-signed certificate to your browser

  2. 如果您有 Spring Boot 服务的域名,那么您可以从 Let's Encrypt 和 configure it for Spring Boot 获得该域的免费 SSL 证书。

    李>

顺便说一句,我注意到您尝试创建 truststore 而不是 keystoretruststore 实际上是用于不同的东西(我们称之为client-mutual-auth)——可能不是你需要的东西。请参阅this previous thread 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2012-04-22
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2019-05-12
    相关资源
    最近更新 更多