溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何用Carlifornium實(shí)現(xiàn)使用PSK算法的DTLS協(xié)議

發(fā)布時(shí)間:2021-12-17 17:14:12 來源:億速云 閱讀:216 作者:柒染 欄目:互聯(lián)網(wǎng)科技

如何用Carlifornium實(shí)現(xiàn)使用PSK算法的DTLS協(xié)議,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

Carlifornium是Eclipse上的一個(gè)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 應(yīng)該是自己的密鑰

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密鑰,不然會(huì)自動(dòng)查找ECDHE的公私鑰
builder.setSupportedCipherSuites("TLS_PSK_WITH_AES_128_GCM_SHA256");
dtlsConnector = new DTLSConnector(builder.build());

交互過程抓包大約是這樣:

如何用Carlifornium實(shí)現(xiàn)使用PSK算法的DTLS協(xié)議

在Server Hello 里能看到使用的是我們指定的PSK算法。

如何用Carlifornium實(shí)現(xiàn)使用PSK算法的DTLS協(xié)議

如果兩邊的配置密鑰錯(cuò)誤,能看到數(shù)據(jù)失?。?/p>

如何用Carlifornium實(shí)現(xiàn)使用PSK算法的DTLS協(xié)議

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>

看完上述內(nèi)容,你們掌握如何用Carlifornium實(shí)現(xiàn)使用PSK算法的DTLS協(xié)議的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI