您好,登錄后才能下訂單哦!
如何用Carlifornium實現使用PSK算法的DTLS協議,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Carlifornium是Eclipse上的一個CoAP+DTLS框架,CoAP和DTLS是啥就先不說了,上代碼。
//指定公私鑰文件信息 private static final char[] KEY_STORE_PASSWORD = "123456".toCharArray(); private static final String KEY_STORE_LOCATION = "demo2.jks"; private static final char[] TRUST_STORE_PASSWORD = "123456".toCharArray(); private static final String TRUST_STORE_LOCATION = "demo2.jks"; ...... //加載公私鑰文件 SslContextUtil.Credentials clientCredentials = SslContextUtil.loadCredentials( SslContextUtil.CLASSPATH_SCHEME + KEY_STORE_LOCATION, "demo2", KEY_STORE_PASSWORD,KEY_STORE_PASSWORD); Certificate[] trustedCertificates = SslContextUtil.loadTrustedCertificates(SslContextUtil.CLASSPATH_SCHEME + TRUST_STORE_LOCATION, "demo2", TRUST_STORE_PASSWORD); DtlsConnectorConfig.Builder builder = new DtlsConnectorConfig.Builder(); //指定PSK密鑰 builder.setPskStore(new StaticPskStore("Client_identity", "secretPSK".getBytes())); builder.setIdentity(clientCredentials.getPrivateKey(), clientCredentials.getCertificateChain(),CertificateType.RAW_PUBLIC_KEY, CertificateType.X_509); builder.setTrustStore(trustedCertificates); builder.setRpkTrustAll(); builder.setConnectionThreadCount(1); dtlsConnector = new DTLSConnector(builder.build());
這里的demo2.jks,是用jdk的keytool生成的,我是偷懶了,用的同樣的公私鑰,KEY_STORE_LOCATION 應該是自己的密鑰
keytool -genkey -alias demo2 -keypass 123456 -keyalg EC -keysize 256 -validity 3650 -keystore demo2.jks -storepass 123456
keytool生成的pass要與代碼中的password一致, alias的名稱也要一致。
客戶端代碼
DtlsConnectorConfig.Builder builder = new DtlsConnectorConfig.Builder(); //指定PSK的密鑰,字符串secretPSK就是密鑰 builder.setPskStore(new StaticPskStore("Client_identity", "secretPSK".getBytes())); builder.setConnectionThreadCount(1); //指定用PSK密鑰,不然會自動查找ECDHE的公私鑰 builder.setSupportedCipherSuites("TLS_PSK_WITH_AES_128_GCM_SHA256"); dtlsConnector = new DTLSConnector(builder.build());
交互過程抓包大約是這樣:
在Server Hello 里能看到使用的是我們指定的PSK算法。
如果兩邊的配置密鑰錯誤,能看到數據失敗:
pom.xml中的依賴如下
<dependencies> <dependency> <groupId>org.eclipse.californium</groupId> <artifactId>californium-core</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.eclipse.californium</groupId> <artifactId>scandium</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.13.3</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.13.3</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.13.3</version> </dependency> </dependencies>
看完上述內容,你們掌握如何用Carlifornium實現使用PSK算法的DTLS協議的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。