配置JAVA SSL/TLS 之websocket wss交互式认证

我下面生成的  .keystore文件也可以用   .jks  后缀代替,  jks 的意思就是 java   keystore,   另外需要知道 .cer文件是二进制的,   .pem文件是文本文件, 本质都是一样的, 他们可以互相转换。   java 语言操作的是二进制的文件, 其他的一些脚本语言, 可能操作的是PEM格式的文件。看具体情况吧。


创建服务端keystore
keytool -genkey -v -alias server_ks -keysize 2048 -keyalg RSA -dname "CN=www.abc.com" -keypass 123456 -storepass 123456 -keystore ./server.keystore -validity 36500

创建客户端keystore
keytool -genkey -v -alias client_ks -keysize 2048 -keyalg RSA -dname "CN=www.abc.com" -keypass 123456 -storepass 123456 -keystore ./client.keystore -validity 36500

导出服务端证书
keytool -export -v -alias server_ks -keystore ./server.keystore -storepass 123456 -file ./server.cer  

导出客户端证书
keytool -export -v -alias client_ks -keystore ./client.keystore -storepass 123456 -file ./client.cer


将服务端证书导入到客户端trustkeystroe
keytool -import -v -alias xxx -keystore ./clientTrust.jks -storepass 123456 -file ./server.cer  

将客户端证书导入到服务端trustkeystroe
keytool -import -v -alias xxx -keystore ./serverTrust.jks -storepass 123456 -file ./client.cer  


把二进制的CER文件转换为文本的PEM文件
openssl x509 -in ./xxx.cer -inform der -outform pem -out ./xxx.pem

把文本的PEM文件转换为二进制的CER文件
openssl x509 -in ./xxx.pem -inform pem -outform der -out ./xxx.cer



jks文件(java key store文件)转化为浏览器可以加载的PKCS12格式
keytool -importkeystore -srckeystore ./client.keystore -destkeystore ./browser.p12 -srcstoretype JKS -deststoretype PKCS12 -keypass 123456 -storepass 123456


storetype 类型有  JKS, JCEKS, PKCS12, PKCS11 and DKS


下面的命令查看证书是否已经添加到信任列表中了

keytool -list -keystore  ./serverTrust.jks




<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
Netty WebSocket Timer Service
</head>
<br>
<body>
<br>
<script type="text/javascript">
var socket;
if (!window.WebSocket)
{
    window.WebSocket = window.MozWebSocket;
}
if (window.WebSocket) {
    socket = new WebSocket("wss://www.abc.com:9999/");
    socket.onmessage = function(event) {
        var ta = document.getElementById('responseText');
        ta.value="";
        ta.value = event.data
    };
    socket.onopen = function(event) {
        var ta = document.getElementById('responseText');
        ta.value = "Open WebSocket success,Browser support WebSocket!";
    };
    socket.onclose = function(event) {
        var ta = document.getElementById('responseText');
        ta.value = "";
        ta.value = "WebSocket closed!";
    };
}
else
    {
    alert("Sorry,Your browser is not support WebSocket!");
    }

function send(message) {
    if (!window.WebSocket) { return; }
    if (socket.readyState == WebSocket.OPEN) {
        socket.send(message);
    }
    else
        {
          alert("WebSocket can't connect server!");
        }
}
</script>
<form onsubmit="return false;">
<input type="text" name="message" value="Netty example"/>
<br><br>
<input type="button" value="Send WebSocket message" onclick="send(this.form.message.value)"/>
<hr color="blue"/>
<h3>Server response message</h3>
<textarea id="responseText" style="width:500px;height:300px;"></textarea>
</form>
</body>
</html>


源码在我的下载资源里有, 包括客户端源码和服务器端源码。  通过java客户端TCP的双向认证收发, 通过浏览器测试的websocket双向认证收发都测试通过。



猜你喜欢

转载自blog.csdn.net/langeldep/article/details/54772736
今日推荐