Ada*_* De 3 java ssl https jks spring-boot
也许我会在这里找到帮助。我想在 Spring Boot 应用程序上启用 SSL。我有这样的配置:
服务器:端口:8999 ssl:启用:true 密钥库:类路径:keystore.jks 密钥库密码:mypass 密钥密码:mypass
问题是我的密钥库。我已使用别名“tomcat”将 *crt 文件导入密钥库:
keytool -importcert -file certificate.crt -keystore native.jks -alias tomcat
Run Code Online (Sandbox Code Playgroud)
但是,我仍然无法正确访问我的 rest api。它在Firefox中吐出错误:
SSL_ERROR_RX_RECORD_TOO_LONG
certificate.crt、certificate.p12、certificate.pk、privkey.pem 和三个文件 root_ca_1.ca-bundle、root_ca_2.ca-bundle、root_ca_3.ca-bundle
. 这就是我的全部。我对 ssl 主题很新鲜,只是阅读了一些教程并尝试了一些 keytool 命令来使其工作。我将不胜感激。先感谢您。
我刚刚花了一个下午弄清楚这个确切的问题,所以我会在这里分享我的过程。
下面的每个参考资料都提供了有关如何生成和使用自签名证书的说明。这并不完全是我想要做的,但这些都包含一些有用的背景信息。
参考:
我已经为 *.jimtough.org 'wildcard' 域购买了真正的 CA 颁发的 SSL 证书。我从http://www.namecheap.com/购买了证书,但实际的证书颁发机构 (CA) 是 Comodo。
作为 CA 购买/激活程序的一部分,我需要遵循以下说明:
请注意,我选择按照他们的 AWS 说明进行操作,因为我是 AWS 用户,并且有一个 EC2 服务器,OpenSSL 和 Java 已经安装在服务器上。有很多其他替代方法可以执行相同的过程,因此请进一步搜索以找到适合您的“生成 CSR”说明。
在这一步结束时,我有以下两个文件:
csr.pem - 这用作 SSL 证书请求/激活过程的一部分private.key- 这是我的 SSL 证书的私钥部分,我稍后需要在我的服务器上安装证书。保密。保持安全。在我完成 SSL 证书的购买和验证程序后,CA 给我发回了一个包含 .p7b、.crt 和 .ca-bundle 文件的 .zip 文件。
下面的参考链接之一解释了这些证书文件类型之间的区别:
.p7b - 此类型应与基于 Java 的应用程序兼容(PKCS#7 格式).crt - 这种类型应该与大多数其他东西兼容 - 上面的链接表明这是 PEM 格式.ca-bundle - 不确定何时使用它 - 上面的链接表明这是 PEM 格式参考:
接下来我需要弄清楚如何使用我上面列出的文件来为 HTTPS 配置我的 Spring Boot 应用程序。
我将按照以下教程的相关部分来获取我需要的内容:
注意:在这两个教程中,我不会按照他们关于创建自签名证书的部分进行操作,因为我已经拥有由真实 CA 颁发的真实证书。
他们的说明中的第一个相关步骤是创建一个新的 Java 密钥库。要求是:
我将使用我的 AWS EC2 Linux 服务器来执行此操作。我的服务器已经安装了 Java/keytool 和 OpenSSL 实用程序。首先,我需要使用 OpenSSL 实用程序创建一个 .p12 文件(如果我理解正确的话)将包含我的私钥和 CA 颁发的证书。其次,我需要创建一个新的 Java 密钥库,其中将包含 .p12 文件的导入副本。
openssl pkcs12 -export -out jimtough-dot-org.p12 -name "jimtough-dot-org" -inkey private.key -in __jimtough_org.crt
keytool -importkeystore -srckeystore jimtough-dot-org.p12 -srcstoretype PKCS12 -destkeystore jimtough-dot-org-keystore.jks -deststoretype JKS
keytool -importkeystore -srckeystore jimtough-dot-org-keystore.jks -destkeystore jimtough-dot-org-keystore.pkcs12 -deststoretype pkcs12
最后,我需要将我新创建的 Java 密钥库与我的 Spring Boot 应用程序打包并配置应用程序以使用它。
参考:
我回顾了上面的两个 Baeldung 教程,并且能够获得使我的 Spring Boot(启用 Spring Security)工作所需的详细信息。
我在现有的“src/main/resources”下创建了一个新的“keystore”文件夹,并将我新创建的两个密钥库文件复制到那里(我保留了两种格式)。
我将下面的块添加到我的 Spring Boot 应用程序的application.properties文件中。
#--------------------------------------------------------------------------------------------------
# SSL CONFIGURATION
# The format used for the keystore. It could be set to JKS in case it is a JKS file
#server.ssl.key-store-type=JKS
server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate
#server.ssl.key-store=classpath:keystore/jimtough-dot-org-keystore.jks
server.ssl.key-store=classpath:keystore/jimtough-dot-org-keystore.pkcs12
server.ssl.key-store-password=mykeystorepassword
server.ssl.key-alias=jimtough-dot-org
server.ssl.enabled=true
server.port=8443
#--------------------------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,当我尝试使用 https://localhost:8443/ 作为 URL 连接到本地运行的 Spring Boot 应用程序实例时,我从浏览器收到了一堆警告。发生这种情况是因为浏览器正确识别了 'localhost' 与创建我的 SSL 证书以在其上运行的预期 'jimtough.org' 域之间的不匹配。当我将应用程序部署到主机名为“anything.jimtough.org”(或只是www.jimtough.org)的服务器时,不应该有任何警告。
就是这样!HTTPS 快乐!
好吧,您需要在 ssl 配置中添加更多属性
server:
ssl:
key-store: classpath:config/tls/keystore.p12
key-store-password: password ##this will be your certificate password
key-store-type: PKCS12
ciphers: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
enabled-protocols: TLSv1.2
http2:
enabled: true
Run Code Online (Sandbox Code Playgroud)
确保 p12 密钥库文件存在于 config/tls 中的类路径 (src/main/resources) 下
但要生成密钥库文件,请使用以下 openssl 命令,您将在其中使用 .crt 和 .key 文件生成 .p12 文件。
.crt 和 .key 存在于文件夹 CA 下,并且文件 p12 文件将在 CA 下生成
请注意,运行以下命令后您将要求输入证书密码
openssl pkcs12 -export -in CA/certificate.crt -inkey CA/certificate.key -name certificate -out CA/certificate.p12
Run Code Online (Sandbox Code Playgroud)
如果您想将此证书添加到本地 cacert,请使用以下命令
在jre\lib\security下
keytool -importcert -noprompt -trustcacerts -alias ca.certificate -file CA/certificate.crt -keystore cacerts -storepass changeit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5160 次 |
| 最近记录: |