我在Firebase中托管了一个Angular PWA,并且我正在尝试与Spring Boot服务进行通信(此刻在本地运行)。
Firebase出于自己的良心,会自动为托管应用创建SSL证书,因此它是安全的,只能通过HTTPS访问。
我无法解决的问题是如何设置我的Spring Boot服务以接受/信任/允许这些连接,以便PWA可以进行基本的REST调用(我什至需要这样做?)。
我的第一个想法是将Firebase的证书添加到Spring引导信任库中,但是我做错了或者这是错误的方法,因为我只是将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
我不确定我是否完全错了,或者错过了至关重要的一步。
答案 0 :(得分:1)
不幸的是,这种方法不会起作用,但可能不是必需的。
您可能已经知道,SSL与“公钥密码术”一起使用,它需要两个密钥:一个私有密钥和一个公共密钥。 SSL证书基本上是公钥以及其他一些验证信息。
尽管您可以使用keytool
提取 SSL证书,但这不会给我们至关重要的私钥。出于安全原因,可能无法从Firebase导出私钥。
那该怎么办?
如果您只是在本地进行测试,则可以只使用纯HTTP(没有安全性,但是您也不需要执行任何操作)-或使用self-signed certificate。如果使用自签名证书,则可能还需要add the self-signed certificate to your browser。
如果您的Spring Boot服务有一个域名,则可以从Let's Encrypt和configure it for Spring Boot获得该域的免费 SSL证书。
顺便说一句,我注意到您尝试创建truststore
而不是keystore
。 truststore
实际上是针对不同的东西(我们称之为 client-mutual-auth )-可能不是您所需要的。有关更多信息,请参见this previous thread。