首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向Mirth Keystore添加证书

向Mirth Keystore添加证书
EN

Stack Overflow用户
提问于 2020-04-24 23:47:38
回答 1查看 4.3K关注 0票数 5

这看起来应该是一件很简单的事情。我希望能够信任Mirth所依赖的服务提供的证书,而无需修改全局Java证书存储(或者对于SSL插件每个实例删除几个)。我试过以下几种方法:

生成自己的密钥存储库:

Keytool命令:

代码语言:javascript
复制
keytool -genkey -keystore appdata\my.jks -storetype PKCS12 -keyalg RSA -keysize 2048 -storepass xxxxxxxx
keytool -importcert -alias my-ca-cert -file myCaCert.pem -keystore appdata\my.jks -trustcacerts -storepass xxxxxxxx
keytool -importcert -alias my-server-cert -file myServerCert.pem -keystore appdata\my.jks -trustcacerts -storepass xxxxxxxx

Mirth.properties:

代码语言:javascript
复制
keystore.path = ${dir.appdata}/my.jks
keystore.storepass = xxxxxxxx
keystore.keypass = xxxxxxxx
keystore.type = pkcs12

在这种情况下,Mirth完全无法启动。日志中的第一个错误是

代码语言:javascript
复制
java.io.IOException: Invalid keystore format
  at com.sun.crypto.provider.JceKeyStore.engineLoad(JceKeyStore.java:724)
  at java.security.KeyStore.load(Unknown Source)
  at com.mirth.connect.server.MirthWebServer.createSSLConnector(MirthWebServer.java:370)
  at com.mirth.connect.server.MirthWebServer.<init>(MirthWebServer.java:150)
  at com.mirth.connect.server.Mirth.startWebServer(Mirth.java:385)
  at com.mirth.connect.server.Mirth.startup(Mirth.java:265)
  at com.mirth.connect.server.Mirth.run(Mirth.java:154)

更新Mirth内置密钥存储库:

Keytool命令:

代码语言:javascript
复制
keytool -importcert -alias my-ca-cert -file myCaCert.pem -keystore appdata\keystore.jks -trustcacerts -storetype jceks -storepass xxxxxxxx
keytool -importcert -alias my-server-cert -file myServerCert.pem -keystore appdata\keystore.jks -trustcacerts -storetype jceks -storepass xxxxxxxx

Mirth.properties:

代码语言:javascript
复制
keystore.path = ${dir.appdata}/keystore.jks
keystore.storepass = xxxxxxxx
keystore.keypass = xxxxxxxx
keystore.type = JCEKS

在本例中,Mirth完全启动,但服务器证书被认为无效。错误日志

代码语言:javascript
复制
DETAILS:    JavaException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
  at 69352923-b68f-4e96-95a3-ad7681a7f3c1_Deploy:112 (doScript)
  at 69352923-b68f-4e96-95a3-ad7681a7f3c1_Deploy:118
  at com.mirth.connect.server.util.javascript.JavaScriptUtil.executeScript(JavaScriptUtil.java:547)
  at com.mirth.connect.server.util.javascript.JavaScriptUtil$2.doCall(JavaScriptUtil.java:379)
  at com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113)
  at java.util.concurrent.FutureTask.run(Unknown Source)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  at java.lang.Thread.run(Unknown Source)

更新Java全局密钥存储库

Keytool命令:

代码语言:javascript
复制
keytool.exe -importcert -alias my-ca-cert -file myCaCert.pem -keystore cacerts -storepass xxxxxxxx
keytool.exe -importcert -alias my-server-cert -file myServerCert.pem -keystore cacerts -storepass xxxxxxxx

Mirth.properties:(与上面相同)

代码语言:javascript
复制
keystore.path = ${dir.appdata}/keystore.jks
keystore.storepass = xxxxxxxx
keystore.keypass = xxxxxxxx
keystore.type = JCEKS

这是可行的,但并不可取,因为它会使部署复杂化(我们无法控制客户环境),而且我也不相信Java升级不会简单地覆盖存储。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-02 21:22:55

通过太多的尝试和错误,我学到了以下几点:

  1. 本地镜像发送者/接收者自己使用 Mirth Keystore定义在Mirth.properties中。如上所述,导入证书将适用于这些通道。

  1. --如果您使用Rhino引擎(例如Java/JavaScript)发送/接收http请求,则会忽略Mirth,并使用全局Java存储。同样,上面描述的过程也是有效的。由于我的证书来自Mirth.properties,所以我可以通过将Mirth.properties添加到Mirth.properties来稍微简化一些,而不是让我的现场技术人员在Mirth.properties的keytool

中游刃有余。

我最初没有看到Mirth通道工作的原因是因为我的通道部署脚本从一个auth提供程序那里获得了一个访问令牌,而且我没有考虑独立地测试通道发送方。我认为无论是以编程方式还是通过UI配置通道,这都无关紧要,但是,好吧,这是给您的Mirth。:/

不管怎样,希望有一天这能帮到某人。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61419138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档