Windows运行Flask服务和SpringBoot服务时,生成自签名证书,提供Https访问接口

Windows安装OpenSSL

参考博客https://blog.csdn.net/loveryunz/article/details/136739887

生成 SSL 证书和私钥

打开命令提示符或PowerShell,并运行以下命令:

生成私钥 (.key文件):

openssl genrsa -out server.key 2048

生成证书签名请求 (.csr文件):

openssl req -new -key server.key -out server.csr

在这个过程中,你会被要求填写一些信息,比如国家代码、省份、城市、组织名称等。最重要的是Common Name (CN),它应该与你将要访问服务的域名匹配(穿透的域名)。如果你只是用于测试目的,可以使用localhost。

生成自签名证书 (.crt文件):

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

这个命令将会创建一个有效期为365天的自签名证书。

最终将在命令运行路径下生成server.crtserver.csrserver.key文件。

假设要远程调用Flask服务,
.crt.key文件移动到程序目录下,在flask的启动命令添加参数ssl_context=('server.crt', 'server.key')
删除证书时直接删除文件即可

生成jks

现复制之前生成的.crt文件到客户端

  1. 删除旧的证书条目(如有,主要作替换jks用)
    使用keytool -delete命令从信任库中移除旧的证书。你需要提供证书的别名(alias)和信任库的密码。
keytool -delete -alias subconverter -keystore "your_jks_file_name.jks" -storepass your_store_password
  1. 导入新的证书
    接下来,使用与最初导入证书相同的keytool -import命令将新的证书导入到信任库中。确保你使用相同的别名(alias),这样应用程序不会因为找不到特定的别名而报错。
keytool -import -file "your_crt_file_name.crt" -alias subconverter -keystore "your_jks_file_name.jks" -storepass your_store_password

在执行上述命令时,keytool可能会提示你确认是否信任该证书。输入并按回车键继续。

最后将生成的.jks文件提供给SpringBoot作为认证。

SpringBoot使用Https

如果你使用keytool -import命令直接将.crt(证书文件)导入到JKS中,那么你只会得到一个包含公钥的条目(trustedCertEntry),而不会包含私钥。为了使Spring Boot能够处理HTTPS请求,你需要确保密钥库中包含的是私钥条目(PrivateKeyEntry),这通常意味着需要同时拥有证书和对应的私钥。

解决方案

为了创建包含私钥的JKS文件,你可以按照以下步骤操作:

1. 准备必要的文件

确保你有以下文件:

  • .crt 文件:这是你的SSL证书。
  • .key 文件:这是与证书关联的私钥文件。

2. 生成 PKCS#12 文件

首先,使用OpenSSL工具将证书和私钥打包成一个PKCS#12格式的文件(.p12.pfx)。这个文件将同时包含证书链和私钥。

openssl pkcs12 -export -out your_p12_file_name.p12 -in your_crt_file_name.crt -inkey your_key_file_name.key -name subconverter -CAfile ca-bundle.crt -caname root

在这个命令中:

  • -out your_p12_file_name.p12:指定输出的PKCS#12文件名。
  • -in your_crt_file_name.crt:输入的证书文件。
  • -inkey your_key_file_name.key:输入的私钥文件。
  • -name subconverter:为PKCS#12文件中的条目指定别名。
  • -CAfile ca-bundle.crt:可选参数,用于指定任何中间或根证书文件。
  • -caname root:可选参数,为CA证书指定名称。

在执行上述命令时,系统会提示你输入并确认一个导出密码。请记住这个密码,因为你在后续步骤中需要用到它。

3. 从 PKCS#12 转换为 JKS

接下来,使用keytool命令将PKCS#12文件转换为JKS格式,并将其导入到Java KeyStore中。

keytool -importkeystore -srckeystore your_p12_file_name.p12 -srcstoretype PKCS12 -srcstorepass your_export_password -destkeystore your_jks_file_name.jks -deststoretype JKS -deststorepass your_store_password -alias subconverter

在这个命令中:

  • -srckeystore your_p12_file_name.p12:源密钥库文件(即前面生成的PKCS#12文件)。
  • -srcstoretype PKCS12:源密钥库类型。
  • -srcstorepass your_export_password:你在生成PKCS#12文件时设置的密码。
  • -destkeystore your_jks_file_name.jks:目标密钥库文件(即你要创建的JKS文件)。
  • -deststoretype JKS:目标密钥库类型。
  • -deststorepass your_store_password:JKS文件的密码。
  • -alias subconverter:为JKS中的条目指定别名。

4. 验证密钥库内容

最后,使用keytool命令检查新创建的JKS文件,以确认其包含正确的条目类型。

keytool -list -v -keystore your_jks_file_name.jks -storepass your_store_password

你应该看到类似以下的输出,表明条目是PrivateKeyEntry

Alias name: subconverter
Creation date: ...
Entry type: PrivateKeyEntry
Certificate chain length: 1 (or more)
...

更新 Spring Boot 配置

确保你的application.properties文件正确配置了新的JKS文件路径和别名:

server.port=8443
server.ssl.key-store=classpath:your_jks_file_name.jks # 或者绝对路径 E:/idea项目/sifanERP/h3yun-api/src/main/resources/mycacerts.jks
server.ssl.key-store-password=your_store_password
server.ssl.keyStoreType=JKS
server.ssl.keyAlias=subconverter

总结

通过以上步骤,你应该能够创建一个包含私钥的JKS文件,并将其正确配置到Spring Boot应用程序中,从而解决Alias name [subconverter] does not identify a key entry的问题。关键在于确保JKS文件中包含的是私钥条目(PrivateKeyEntry),而不是仅包含公钥的条目(trustedCertEntry)。

posted @   kksk43  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2021-01-21 Matlab应用笔记--灰色预测
2021-01-21 Matlab应用笔记--简单规划求解
2021-01-21 Matlab应用笔记--简单数据拟合
特效
黑夜
侧边栏隐藏
点击右上角即可分享
微信分享提示