当前位置: 首页 > 知识库问答 >
问题:

我正在尝试使用提供的示例“SendEventX509.java”发送消息,但我遇到问题。下面提到的堆栈跟踪

濮波
2023-03-14

我正在尝试使用提供的示例“SendEventX509.java”发送消息,但我面临问题。下面提到的堆栈跟踪操作系统-Windows 10

使用的Java运行时:JDK 11.0.3

使用的SDK版本:物联网中心Java设备SDK 1.17.5

“中提供的样本”https://github.com/Azure/azure-iot-sdk-java/blob/master/device/iot-device-samples/send-event-x509/src/main/java/samples/com/microsoft/azure/sdk/iot/SendEventX509.java"

证书是从“预配 X509CertGen.java”生成的,并且设备已成功注册并通过 X509 证明在 IoTHub 中预配。

问题的控制台日志:

Exception in thread "main" java.io.IOException: Could not open the connection
at com.microsoft.azure.sdk.iot.device.DeviceIO.open(DeviceIO.java:164)
at com.microsoft.azure.sdk.iot.device.InternalClient.open(InternalClient.java:130)
at com.microsoft.azure.sdk.iot.device.DeviceClient.open(DeviceClient.java:317)
at samples.com.microsoft.azure.sdk.iot.SendEventX509.main(SendEventX509.java:136)
Caused by: com.microsoft.azure.sdk.iot.device.exceptions.TransportException: java.io.IOException: java.security.KeyStoreException: Key protection algorithm not found: java.security.UnrecoverableKeyException: Encrypt Private Key failed: password has been cleared
at com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection.open(MqttIotHubConnection.java:204)
at com.microsoft.azure.sdk.iot.device.transport.IotHubTransport.openConnection(IotHubTransport.java:700)
at com.microsoft.azure.sdk.iot.device.transport.IotHubTransport.open(IotHubTransport.java:280)
at com.microsoft.azure.sdk.iot.device.DeviceIO.open(DeviceIO.java:160)
... 3 more
Caused by: java.io.IOException: java.security.KeyStoreException: Key protection algorithm not found: java.security.UnrecoverableKeyException: Encrypt Private Key failed: password has been cleared
at com.microsoft.azure.sdk.iot.device.auth.IotHubX509SoftwareAuthenticationProvider.getSSLContext(IotHubX509SoftwareAuthenticationProvider.java:66)
at com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection.open(MqttIotHubConnection.java:125)
... 6 more
Caused by: java.security.KeyStoreException: Key protection algorithm not found: java.security.UnrecoverableKeyException: Encrypt Private Key failed: password has been cleared
at java.base/sun.security.pkcs12.PKCS12KeyStore.setKeyEntry(PKCS12KeyStore.java:704)
at java.base/sun.security.pkcs12.PKCS12KeyStore.engineSetKeyEntry(PKCS12KeyStore.java:601)
at java.base/sun.security.util.KeyStoreDelegator.engineSetKeyEntry(KeyStoreDelegator.java:111)
at java.base/java.security.KeyStore.setKeyEntry(KeyStore.java:1174)
at com.microsoft.azure.sdk.iot.deps.auth.IotHubSSLContext.generateSSLContextWithKeys(IotHubSSLContext.java:208)
at com.microsoft.azure.sdk.iot.deps.auth.IotHubSSLContext.(IotHubSSLContext.java:168)
at com.microsoft.azure.sdk.iot.device.auth.IotHubX509SoftwareAuthenticationProvider.generateSSLContext(IotHubX509SoftwareAuthenticationProvider.java:96)
at com.microsoft.azure.sdk.iot.device.auth.IotHubX509SoftwareAuthenticationProvider.getSSLContext(IotHubX509SoftwareAuthenticationProvider.java:56)
... 7 more
Caused by: java.security.UnrecoverableKeyException: Encrypt Private Key failed: password has been cleared
at java.base/sun.security.pkcs12.PKCS12KeyStore.encryptPrivateKey(PKCS12KeyStore.java:951)
at java.base/sun.security.pkcs12.PKCS12KeyStore.setKeyEntry(PKCS12KeyStore.java:641)
... 14 more
Caused by: java.lang.IllegalStateException: password has been cleared
at java.base/javax.crypto.spec.PBEKeySpec.getPassword(PBEKeySpec.java:196)
at org.bouncycastle.jcajce.provider.symmetric.util.BCPBEKey.getPassword(Unknown Source)
at java.base/com.sun.crypto.provider.PKCS12PBECipherCore.implInit(PKCS12PBECipherCore.java:268)
at java.base/com.sun.crypto.provider.PKCS12PBECipherCore.implInit(PKCS12PBECipherCore.java:379)
at java.base/com.sun.crypto.provider.PKCS12PBECipherCore.implInit(PKCS12PBECipherCore.java:364)
at java.base/com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede.engineInit(PKCS12PBECipherCore.java:473)
at java.base/javax.crypto.Cipher.implInit(Cipher.java:847)
at java.base/javax.crypto.Cipher.chooseProvider(Cipher.java:901)
at java.base/javax.crypto.Cipher.init(Cipher.java:1576)
at java.base/javax.crypto.Cipher.init(Cipher.java:1507)
at java.base/sun.security.pkcs12.PKCS12KeyStore.encryptPrivateKey(PKCS12KeyStore.java:934)
... 15 more

请帮助解决此问题

共有1个答案

严易安
2023-03-14

从Java 9开始,默认的密钥库类型已经从jks更改为pkcs12。看起来上面的azure SDK代码可以与JKS密钥库一起正常工作。你有两个选择:

>

  • 在 Java 11 jdk/jre 安装中将密钥库类型更改为 java.安全性文件中的 jks。这将对所有应用程序产生更广泛的影响。所以要小心。

    如果已从 github 克隆了 Azure 样本的完整存储库,请更改“”,并获取 JKS 密钥库的实例,而不是默认密钥库。所以改变:

    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());

    KeyStore keystore = KeyStore.getInstance("jks");
    

    希望这会对你有帮助。

  •  类似资料:
    • 错误:在类com.complete.reference.shift中找不到Main方法,请将Main方法定义为:public static void Main(String[]args)或JavaFX应用程序类必须扩展JavaFX.application.application

    • 这是一个艰难的问题。一位客户通过崩溃报告向我发送了此堆栈跟踪。它没有提到我的应用程序的类,所以我对从哪里开始寻找感到困惑。 我的应用是商业桌面应用。崩溃报告是匿名的,所以我无法轻松获得有关崩溃的更多信息。 编辑:一些谷歌搜索和线程跟踪让我得出结论,这是Java 1.7中的一个零星问题。正在寻找解决方案。。。 如何继续调试?

    • 我使用以下代码打印try-catch块中发生的任何异常,但是当异常发生时,logback不会打印完整的堆栈跟踪,而是写入一行错误(它没有明确说明是什么导致了它。我如何在logback输出中打印完整的堆栈跟踪? 尝试捕获异常的catch块 日志返回错误输出:

    • 我得到这个错误 2020-06-03 21:08:07连接:打开到ssl://smtp.gmail.com:25,超时=300,选项=数组()2020-06-03 21:08:07连接失败。 错误#2:stream_socket_client():代码1的SSL操作失败。 OpenSSL错误消息:错误:1408F10B:SSL例程:ssl3\u get\u记录:错误的版本号[C:\xampp\ht

    • 问题内容: 假设您执行 e.printStackTrace() ,则捕获到一个异常并在标准输出(例如控制台)上获得以下内容: 现在,我想将其发送给log4j之类的记录器,以获取以下信息: 我怎样才能做到这一点? 问题答案: 您将异常直接传递给记录器,例如 取决于log4j来呈现堆栈跟踪。

    • 这是大约20天前被问及的,当时我正试图在我的应用程序上显示天气图标,这是根据天气官方API文档中列出的天气状况数量,城市的反应(从可绘制的文件夹中)https://openweathermap.org/weather-conditions(您始终可以通过检查编辑历史来查看)。API提供了9种主要天气条件。 这仍然是我的目标: > 当应用程序首次打开时,不显示任何图标。 如果用户搜索一个城市,得到的