关于java通过ssl连接mqtt

我这边java在没有通过ssl连接mqtt的时候是可以连接的(可以订阅与发布),
但是通过ssl就不行了,发现是读取证书的时候出错了,错误是这样的:

java.security.cert.CertificateException: Unable to initialize, java.io.IOException: extra data given to DerValue constructor

at sun.security.x509.X509CertImpl.(Unknown Source)
at sun.security.provider.X509Factory.engineGenerateCertificate(Unknown Source)
at java.security.cert.CertificateFactory.generateCertificate(Unknown Source)
at com.test.mqtt.AppTest.main(AppTest.java:51)

Caused by: java.io.IOException: extra data given to DerValue constructor

at sun.security.util.DerValue.init(Unknown Source)
at sun.security.util.DerValue.(Unknown Source)
at sun.security.util.DerValue.(Unknown Source)
... 4 more

具体代码是:
CertificateFactory cf;

try {
    cf = CertificateFactory.getInstance("X.509");
     FileInputStream crtIn = new FileInputStream("D:\\test\\client.crt");
     X509Certificate caCert = (X509Certificate) cf.generateCertificate(crtIn);
        //Certificate caCert =  cf.generateCertificate(crtIn);
        crtIn.close();
} catch (CertificateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JAVA使用ssl方式连接mqtt
请确保你已经有证书了,且已经配置好了mqtt的ssl支持。没有配置好的请看之前的文章:自制CA证书,自制客户端,服务端证书、mqtt配置使用ssl加密通信。按照这两篇文章操作之后接下来就可以编写java代码来使用ssl方式连接mqtt了。 作者是maven项目,所以添加一下依赖: <dependency> <groupId>com.alibaba...
java 连接mqtt服务器
这是我开始实习工作的第一个程序,印象还是非常深刻的,师傅需要我写一个针对他们硬件产品的测试代码,需要连接mqtt服务器. package org.mqtt.client; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; i
Java 连接 MQTT 服务器
可用方案 方案 描述 GitHub链接 mqtt-client 由 Red Hat 子公司 FuseSource 开发 mqtt-client paho.mqtt 由独立的非营利性公司 Eclipse Foundation 开发 eclipse / paho.mqtt.java ...
JAVA 实现SSL 连接
NULL 博文链接:https://shuaizhuaidym.iteye.com/blog/2284877
java ssl连接问题
首先声明,我这里是ssl连接的客户端,只做单向认证,服务端部署在远程,已完成ssl的配置。rnrn创建一个Java Project,然后设置rn[code=Java]rnSystem.setProperty("javax.net.ssl.trustStore", "cacerts.jks");rnSystem.setProperty("javax.net.ssl.trustStorePassword", "changeit");rn[/code]rn直接运行没有问题,问题是如果客户端是一个web project,仍然用上面的方式设置,那么部署到jboss后,再运行同样的程序就有问题了,报错:trustAnchors parameter must be non-emptyrnrn请问将客户端部署到jboss后该如何设置信任库?
mqtt连接
        var client = mqtt.connect(mqttUrl, {             keepalive : 10,             clientId : '',             protocolId : 'MQTT',             protocolVersion : 4,             clean : true,         ...
mqtt配置使用ssl加密通信
作者使用的是docker版elipse-mosquitto(mqtt),没有使用docker版的mqtt配置与本文相同,进入正题: **请确保你的ca证书所在目录与作者相同!!!!**作者证书制作及所在目录请看自制CA证书,自制客户端,服务端证书 1.准备一个mqtt配置文件mosquitto.conf # Config file for mosquitto # # See mosquitto.c...
NodeMCU 通过MQTT 连接阿里云物联网
NodeMCU 通过MQTT 连接阿里云物联网 1.NodeMCU固件的选择及刷入ESP8266 1123
android MQTT 带SSL加密连接例子demo
android MQTT 带SSL加密连接例子demo 安卓使用BKS加密文件进行SSL加密MQTT连接
(java入门)创建SSL连接
纯粹备忘录。   用Windows系统的证明书STORE System.setProperty("javax.net.ssl.trustStoreProvider", "SunMSCAPI"); System.setProperty("javax.net.ssl.trustStoreType", "Windows-ROOT");   用Java的证明书STORE System.s...
关于SSL的信任连接问题
刚刚写的一个WebService,用了SSL的安全连接和Windows基本用户验证。rn在本机上调试没有任何问题,可在远程机器上总是出现“基础连接已经关闭:无法与远程服务器建立信任关系”的错误。rn经测试,只要启用SSL就出现上面错误。但启用SSL时在远程浏览器上使用那个WebService并没有任何异常,用到客户端程序调用就出现上述错误。rnrn我已在config文件里把servicePointManager的checkCertificateName值置为off了,还有什么其它参数需要修改吗?rnrn恳请高人指点。rnrn(环境:Windows2000server+VS.net2003)rn
mqtt通过配置文件启动
启动命令: mosquitto -v 通过配置文件启动: mosquitto -c /etc/mosquitto/mosquitto.conf 具体路径查看自己的安装目录会有所不同, 如果不太清楚安装配置可以参考我之前写的mqtt配置
【MQTT学习】MQTT连接阿里云教程
打开阿里云官网https://www.aliyun.com/,注册并登录 找到右上角的控制台点进去 点击左侧的栏目找到“产品与服务”,在里面继续找到“应用与服务下面的”“物联网平台” 依次找到《设备管理》《产品》,然后“创建产品” 这里面有些内容需要根据自己的情况填写 主要的注意结点类型和联网里面的选项,产品名称,分类等都没什么说的,完成创建后就可以继续创建设备了。 这里提...
MQTT猫用于连接MQTT服务器
MQTT猫用于连接MQTT服务器,作为连接服务器的一个可用客户端
Oracle通过SSL方式连接AD服务器
一】在Oracle服务器上创建Wallet 首先应该在ad服务器上导出一个扩展名为.cer的根证书,这一步骤请联系网管,此处不描述了。 登录Oracle所在服务器 su - oracle mkdir /home/oracle/wallet 正式创建一个wallet对象,访问密码为wallet orapki wallet create -wallet /home/oracle/wallet -pwd...
通过JDBC怎么连接启用SSL的sybase数据库?
现在想连接一个启用SSL功能的数据库,jdbc url 该怎么写?我用的是sybase官方驱动。现在的url:rnurl = "jdbc:sybase:Tds:" + hostname+":" + port + "/" + databaseName;rn还需要哪些参数?怎么设置?请处理过这种问题的帮忙
java 通过SSL/TLS加密https建立连接
这个项目是基于与Ruby客户端进行通信,经过查看源代码,发现对方是经过TLS加密通信。第一次调试,尝试用serversocket与对方进行沟通,可以收到数据,但是无法获取http的包头数据,因此,将先对socket通信进行处理。 一、根据原有软件进行沟通,可以找到原来生成的rcs-db.key、rcs-db.crt文件,可知rcs-db.crt为证书,rcs-db.key为秘钥。因为并没有任何
java 客户机通过SSL方式连接MQ ,求指导
MQ Server 版面 5.3 或者7.0rn有没有大侠实现过,求指导,rnMSN:rnjason.yao@chinasystems.comrnrnQQ:rn297383949rnrn邮箱:rnyaominhua-1314@163.comrnrn具体MQ Server端的配置和Java客户端的代码!rn期待高手
CC3200 MQTT 连接云平台
该资源基于TI官方的CC3200 SDK开发,使用MQTT协议接入云平台工作,实现传感器的数据采集和控制。
使用js连接mqtt
描述:使用javascript连接mqtt 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <t...
VUE连接MQTT即时通讯
MQTT安装 MQTT安装EMQ安装请参考上一篇:CentOS7.0安装EMQ代理服务 npm安装 npm install mqtt 前端代码实现 mqtt服务器连接参数配置: export const MQTT_SERVICE = 'ws://172.80.5.222:8083/mqtt' export const MQTT_USERNAME = 'admin' export ...
MQTT连接服务器发送和接收数据
这里使用MQTTClient.framework这个第三方框架。 在工程中导入MQTTClient.framework这个框架,见附件。 .h文件 #import #import #import @interface ViewController : UIViewController @end .m文件 #import "ViewCon
js连接mqtt
js连接mqtt 项目中要用到mqtt,前端调用,使用github开源的paho-mqtt.js,api还是挺全面的,网上各种教程很全面,但是感觉代码过于杂乱,故而封装的一下。仿jquery ajax调用方法。 首先本项目依赖 paho-mqtt.js 1.引用paho-mqtt.js <script src="https://cdnjs.cloudflare.com/ajax/libs/p...
esp8266连接mqtt服务器
1.MQTT ESP8266库 菜单“项目”-“加载库”-“管理库”,搜索安装“PubSubClient” PubSubClient有一些示例可以打开mqtt_esp8266看下 2.MQTT接发消息体验 这里做两个示例1. NodeMCU发布消息:光照强度传感器测得环境光照强度发布到服务器,手机订阅该Topic接收光强信息 #include <ESP8266WiFi.h&g...
MQTT TLS连接问题
我在用mosquitto做broker,用paho写client,tcp连接没有问题,但是加入了ssl后就出现问题了,下面是我的client的代码:rn[code=java]public static void main(String[] args) rn //TODO Auto-generated method stubrn String address = "ssl://192.168.100.46:8883";rn String topic = "topic0";rn String caFilePath = "SSL/ca.crt";rn String clientCrtFilePath = "SSL/client.crt";rn String clientKeyFilePath = "SSL/client.key";rn String keyPassword = "1234567890";rn MemoryPersistence persistence = new MemoryPersistence();rn try rn MqttConnectOptions options = new MqttConnectOptions();rn options.setCleanSession(false);rn options.setSocketFactory(SslUtil.getSocketFactory(caFilePath,clientCrtFilePath,clientKeyFilePath,keyPassword));rn //options.setSocketFactory(TlsUtil.getSSLSocktet(caFilePath,clientCrtFilePath,clientKeyFilePath,keyPassword));rn //options.setSocketFactory(getSocketFactory(caFilePath,clientCrtFilePath,clientKeyFilePath,keyPassword));rn rn MqttClient client;rn rn client = new MqttClient(address,"java-client",persistence);rn client.connect(options);rn client.subscribe(topic);rn client.setCallback(new MyCallback());rnrn MqttMessage message = new MqttMessage();rn message.setPayload("MosquittoClient连接成功".getBytes());rn client.publish(topic,message);rnrn client.disconnect();rn catch (Exception e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn [/code]rn这是mosquitto显示的错误信息:rn[code=text]New connection from 192.168.100.46 on port 8883.rn1496801675: OpenSSL Error: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returnedrn1496801675: Socket error on client (null), disconnecting.rn1496801675: New connection from 192.168.100.46 on port 8883.rn1496801675: OpenSSL Error: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returnedrn1496801675: Socket error on client (null), disconnecting.[/code]rn这是eclipse里显示的错误信息:rn[code=text]MqttException (0) - java.net.SocketException: Software caused connection abort: socket write errorrn at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)rn at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:690)rn at java.lang.Thread.run(Thread.java:745)rnCaused by: java.net.SocketException: Software caused connection abort: socket write errorrn at java.net.SocketOutputStream.socketWrite0(Native Method)rn at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)rn at java.net.SocketOutputStream.write(SocketOutputStream.java:153)rn at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431)rn at sun.security.ssl.OutputRecord.write(OutputRecord.java:417)rn at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:876)rn at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:847)rn at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:717)rn at sun.security.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:1077)rn at sun.security.ssl.ClientHandshaker.sendChangeCipherAndFinish(ClientHandshaker.java:1222)rn at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:1134)rn at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:348)rn at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)rn at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)rn at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)rn at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)rn at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)rn at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)rn at org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:97)rn at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:676)rn ... 1 more[/code]rn求大佬解惑!
MQTT控制报文(连接)
1.CONNECT – 连接服务端 1.1 可变报文 (协议名 + 协议级别 + 连接标志 + 保持连接) 1.1.1 协议名(内容固定,标识是MQTT协议 。 前2个字节表示长度,后4个字节ASCII码的MQTT) 1.1.2 协议级别(8位的无符号值表示协议的修订版本,对于3.1.1版协议,协议级别字段的值是4(0x04)) 1.1.3 连接标志 注:第0位一定是0 C...
MQTT 连接应答CONNACK
一、组成 固定报头:报文类型+剩余长度(可变报头) 可变报头:连接确认标志+连接返回码 二、对可变报头进行解读 1、连接确认标志:第1个字节是 连接确认标志,位7-1是保留位且必须设置为0。 第0 (SP)位 是当前会话 (Session Present) 标志。  如果服务端收到清理会话(CleanSession) 标志为1的连接,除了将CONNACK报文中的返回码设置为0之外,
关于mqtt
mqtt 是一个消息发布/订阅协议。 消息发布者负责发送消息,订阅者接收消息,中间有消息经纪人broker负责中转。 优点是消息发布者发布消息不需要知道消息订阅者的信息。同样消息订阅者也不需要知道消息发送者的信息(比如ip地址和端口号)。也无需同步进行。
关于java客户端与mqtt服务器用证书连接的问题
在网上找了很多例子,也实现了用java客户端通过证书连接mqtt服务器,但是有疑问的是:java读取自己客户端的证书没有问题但是读取服务器端给我的证书(服务器实在另一台电脑上)就不行,那我岂不是每一个java客户端都要自己在自己的电脑上生成证书才能和服务器进行连接,但是我看亚马逊的awsiot他们就是从网站上下载证书,然后用java客户端进行连接,为什么他的证书就可以呢?有哪位大神能给点提示么?谢谢了
mqtt雙向ssl認證
mqtt雙向認證const mosca = require('mosca'); const tls = require('tls'); var CAFILE = './ca.crt'; var SECURE_KEY = './server.key.insecure'; var SECURE_CERT = './server.crt'; var sslsetting = { port: ...
在MQTT服务器mosquitto上使用SSL/TSL
准备工作: 两台电脑,Window系统电脑称为本地电脑,Linux 系统电脑称为服务器电脑。 1、在本地电脑上下载mosquitto的源码,下载地址http://mosquitto.org/files/source/,这里选择1.4.11的最新版本。 2、下载后解压,解压后得到文件夹如右图所示。 3、将上述解压的文件件拷贝到服务器电脑上,我使用的是SSH Secure File Trans
esp8266与mosquitto的mqtt的ssl通讯实现(一)
将esp8266与mosquitto进行mqtt的ssl加密通讯过程之艰辛,资料程序都没有完整的,问题也很多,好在有CSDN,GitHub,Google等等,大家技术分享和技术问答,所以打算将过程写出来,中间很多问题解决了中间过程没有记下来,以后会经常写博客贴出来,一些源代码也会放到Github上大家参考。 具有参考价值代码,博客也会贴出来,一点点更新吧。 目前基本实现了 设备端-服务器-客户
Android MQTT推送之SSL相关问题解决
公司推送选择的是MQTT,之前没有了解过,所以踩了不少坑,这里记录一下,希望能帮助到别人。 前言 现在大部分公司用的都是单向认证,对于Https不了解的话,请看这里,废话不多说,上干货。 第一步 重命名 你们公司使用SSL,都会在服务端配置一个文件 比如:cacert.pem 你直接将cacert.pem重命名为cacert.crt,然后读取即可 第二步 如何读取? ...
Java通过连接显示图片
首先我们要拿到从数据库查询到的图片路径: public User selectByid(int id) { User user = null; con = DBUtil.getConnection(); try {String str = "where BooksID = ?"; ps = con.prepareStatement(selectBooks.concat(str))...
通过java连接mysql数据库
package it.cast.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;import org.junit.Test;import com.m
java通过was连接db2
java通过webpshere application server连接db2代码
关于通过JDBC连接JAVA与ORACLE的问题
我在JBuilder6.0中编写了一个通过JDBC连接ORACLE的程序,但连接过程中程序一运行rn总是报错,程序在编译时并没有报错,我想问一下成功运行这个程序需要在JBuilder中做rn哪些工作?rn 谢谢!!!
Java ssl连接异常,SSL peer shut down incorrectly
我的项目现在需要ssl方式访问授权的apirnrn1.在CA机构申请的数字证书、根证书、二级证书都已经按要求导入到 myproject.keystore文件。rn2.接口方的公钥也已经导入myproject.trustore文件。rn3.使用openssl在授权服务器测试连接正常。rn4.使用接口方提供的测试demo在本地环境进行连接测试异常(ssh代理方式连接)。异常应该不会是代理的缘故,https可以通过代理方式访问。rnrn贴出来异常,请熟悉ssl机制或者做过这方面项目的朋友帮忙指点下大概可能是哪里的问题:rn[code=java]rnjavax.net.ssl.SSLHandshakeException: Remote host closed connection during handshakern at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:912)rn at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294)rn at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:848)rn at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)rn at sun.security.ssl.AppInputStream.read(AppInputStream.java:69)rn at com.neulevel.epp.transport.EppMessageUtil.getEppPayloadSize(EppMessageUtil.java:199)rn at com.neulevel.epp.transport.EppMessageUtil.getEppPayload(EppMessageUtil.java:234)rn at com.neulevel.epp.transport.tcp.EppSessionTcp.connect(EppSessionTcp.java:255)rn at EppTestClient.main(EppTestClient.java:85)rnCaused by: java.io.EOFException: SSL peer shut down incorrectlyrn at sun.security.ssl.InputRecord.read(InputRecord.java:352)rn at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)rn ... 8 morern[/code]rnrnssl配置rn[code=java]rnssl.client.authentication=truern#rn# For JSSErn#rnssl.keymanager.algorithm=SunX509rn#ssl.keymanager.provider=SUNrnssl.keystore.type=JKSrnssl.keystore.provider=SUNrnssl.keystore.format=filernssl.keystore.name=myproject.keystorernssl.keystore.storepass=mypro123rnssl.keystore.keypass=mypro123rnssl.trustmanager.algorithm=SunX509rn#ssl.trustmanager.provider=SUNrnssl.truststore.type=JKSrnssl.truststore.provider=SUNrnssl.truststore.format=filernssl.truststore.name=myproject.trustorernssl.truststore.storepass=changeitrn[/code]
关于java ssl 性能的问题?
对一个4k大小的数据加密解密签名验证。用DES加密数据,用RSA加密密钥。rn运行环境是1G内存,P4 2.8Hz CPU,有人测试过其性能如何?能达到的最佳效果是多少tps???
(求助)java 通过ssl传数据的问题
我刚学java不久,现在要用java 通过ssl传数据rn我在网上找到篇文章(http://www.yesky.com/285/1794785_1.shtml)是用JSSE定制SSL连接的教程rn再看到这句话时卡住了rn"到目前为止,在当前目录下包含clientKeys,serverKeys,clientTrust,serverTrust四个文件。完成了KeyStore和TrustStore的设置后就可以运行例子程序了。首先需要运行服务器程序:rn  java -Djavax.net.ssl.keyStore=serverKeysrn  -Djavax.net.ssl.keyStorePassword=passwordrn  -Djavax.net.ssl.trustStore#NAME?rn  -Djavax.net.ssl.trustStorePassword=password SimpleSSLServerrn  在命令行中我们指定了keyStore属性为serverKeys。由于服务器程序需要获得客户端的授权信息,我们指定trustStore为serverTrust。这样SSLSimpleServer就可以验证由SSLSimpleClient提供的授权信息。当服务器程序成功运行后,你会看到下面的提示:rn  SimpleSSLServer running on port 49152????"rn我不明白这里说的服务器程序是什么,而且在cmd下运行java -Djavax.net.ssl.keyStore=serverKeys这句的时候告诉我keyStore这个类找不到,我不知道这是个什么类,java帮助文档里没有这个类.各位大哥这是怎么回事,还有我要用java 通过ssl传数据看这个教程可不可以,还有没有别的教程?rn小弟我先谢过了
相关热词 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天 c#func链接匿名方法 c#怎么创建文件夹 c#从键盘接收空格 c#da/ad c#部门请假管理系统 c#服务器socket c# 默认的访问修饰符