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.crt
、server.csr
和server.key
文件。
假设要远程调用Flask服务,
将.crt
和.key
文件移动到程序目录下,在flask的启动命令添加参数ssl_context=('server.crt', 'server.key')
删除证书时直接删除文件即可
生成jks
现复制之前生成的.crt文件到客户端
- 删除旧的证书条目(如有,主要作替换jks用)
使用keytool -delete命令从信任库中移除旧的证书。你需要提供证书的别名(alias)和信任库的密码。
keytool -delete -alias subconverter -keystore "your_jks_file_name.jks" -storepass your_store_password
- 导入新的证书
接下来,使用与最初导入证书相同的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
)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2021-01-21 Matlab应用笔记--灰色预测
2021-01-21 Matlab应用笔记--简单规划求解
2021-01-21 Matlab应用笔记--简单数据拟合