日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java密钥库文件存在但为空_java安全套接层SSL示例

發布時間:2024/4/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java密钥库文件存在但为空_java安全套接层SSL示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.建立密鑰庫:

keytool -genkey -v -keyalg RSA -alias test -keystore sslkeystore

其中;-keyalg RSA表示密鑰算法RSA,-alias test 表示別名test,-keystore sslkeystore 表示密鑰庫名為sslkeystore

2. 制作 證書文件:制作證書是從密鑰庫輸出特定別名的證書,保存到證書文件test.cer中。

keytool -export -alias test -file test.cer -keystore sslkeystore

3.將證書文件test.cer導入自己的密鑰庫test:

keytool -import -alias test -file test.cer -keystore test

4.SSL服務端程序:

SSLServerExample.java

package com.cjq.save;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import javax.net.ssl.SSLServerSocketFactory;

//SSL服務器端程序

public class SSLServerExample {

public static void main(String[] args) throws IOException{

System.setProperty("javax.net.ssl.keyStore","sslkeystore");

System.setProperty("javax.net.ssl.keyStorePassword", "123456");

//創建SSLServerSocketFactory類對象。利用getDefault()方法建立一個強制轉換成的SSLServerSocketFactory類對象

SSLServerSocketFactory sslsf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();

//建立服務器套接口ServerSocket類對象,其端口8080

ServerSocket ss = sslsf.createServerSocket(8080);

System.out.println("Waiting for connection...");

while(true){

Socket s= ss.accept();

System.out.println("Client connection made");

//

PrintWriter out = new PrintWriter(s.getOutputStream());

out.println("HI");

System.out.println("HI is sent to client");

out.close();

s.close();

}

}

}

5.SSL客戶端程序:

SSLClientExample.java:

package com.cjq.save;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.Socket;

import javax.net.ssl.SSLSocketFactory;

//SSL客戶端程序

public class SSLClientExample {

public static void main(String[] args) throws IOException{

//

System.setProperty("javax.net.ssl.trustStore", "test");

System.setProperty("javax.net.ssl.keyStorePassword", "123456");

SSLSocketFactory sslsf = (SSLSocketFactory)SSLSocketFactory.getDefault();

Socket s = sslsf.createSocket("127.0.0.1",8080);

System.out.println("the connection is ok");

BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

System.out.println(in.readLine());

in.close();

s.close();

System.out.println("the connection is close");

}

}

6.運行程序:

cmd窗口運行,且程序中System.setProperty(..,...)的代碼是不存在的時候:

java ?-Djavax.net.ssl.keyStore=sslkeystore -Djava.net.ssl.keyStorePassword=123456?SSLClientExample

則會出現錯誤:

Exception in thread "main" java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)

at javax.net.ssl.DefaultSSLServerSocketFactory.throwException(Unknown Source)

at javax.net.ssl.DefaultSSLServerSocketFactory.createServerSocket(Unknown Source)

at com.cjq.save.SSLServerExample.main(SSLServerExample.java:16)

Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)

at java.security.Provider$Service.newInstance(Unknown Source)

at sun.security.jca.GetInstance.getInstance(Unknown Source)

at sun.security.jca.GetInstance.getInstance(Unknown Source)

at javax.net.ssl.SSLContext.getInstance(Unknown Source)

at javax.net.ssl.SSLContext.getDefault(Unknown Source)

at javax.net.ssl.SSLServerSocketFactory.getDefault(Unknown Source)

at com.cjq.save.SSLServerExample.main(SSLServerExample.java:14)

Caused by: java.security.UnrecoverableKeyException: Password must not be null

at sun.security.provider.JavaKeyStore.engineGetKey(Unknown Source)

at sun.security.provider.JavaKeyStore$JKS.engineGetKey(Unknown Source)

at java.security.KeyStore.getKey(Unknown Source)

at com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.(Unknown Source)

at com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(Unknown Source)

at javax.net.ssl.KeyManagerFactory.init(Unknown Source)

at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(Unknown Source)

at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.(Unknown Source)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.lang.reflect.Constructor.newInstance(Unknown Source)

at java.lang.Class.newInstance0(Unknown Source)

at java.lang.Class.newInstance(Unknown Source)

... 7 more

原因是密碼為空,但實際上參數中有“-Djava.net.ssl.keyStorePassword=123456”這個,密碼不應該為空, 卻報空, 目前不解。

但將java 之后兩個參數寫在程序中:

System.setProperty("javax.net.ssl.keyStore","sslkeystore");

System.setProperty("javax.net.ssl.keyStorePassword", "123456");則正常運行。

總結

以上是生活随笔為你收集整理的java密钥库文件存在但为空_java安全套接层SSL示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。