- 生成方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 1、生成RSA密钥的方法 openssl genrsa -des3 -out privkey.pem 2048 这个命令会生成一个2048位的密钥,同时有一个des3方法加密的密码,如果你不想要每次都输入密码,可以改成: openssl genrsa -out privkey.pem 2048 建议用2048位密钥,少于此可能会不安全或很快将不安全。 2、生成一个证书请求 openssl req -new -key privkey.pem -out cert.csr 这个命令将会生成一个证书请求,当然,用到了前面生成的密钥privkey.pem文件 这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。 如果是自己做测试,那么证书的申请机构和颁发机构都是自己。就可以用下面这个命令来生成证书: openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095 这个命令将用上面生成的密钥privkey.pem生成一个数字证书cacert.pem 3、使用数字证书和密钥 有了privkey.pem和cacert.pem文件后就可以在自己的程序中使用了,比如做一个加密通讯的服务器
|
参考原文【使用OpenSSL生成证书 pem文件的生成 celery Security】
- 校验生成证书md5是否匹配
1 2 3
| openssl x509 -noout -modulus -in certificate.crt | openssl md5 openssl rsa -noout -modulus -in privateKey.key | openssl md5 openssl req -noout -modulus -in CSR.csr | openssl md5
|
参考原文【SSL在线工具】
- 服务器代码配置
1 2 3 4 5 6 7 8 9 10 11 12 13
| if a.sc.Protocol == "wss" { config := &tls.Config{} config.NextProtos = []string{"http/1.1"}
config.Certificates = make([]tls.Certificate, 1) config.Certificates[0], err = tls.LoadX509KeyPair(a.sc.CertFile, a.sc.KeyFile) if err != nil { logger.Logger.Error(err) return nil }
ln = tls.NewListener(ln, config) }
|
- 客户端代码配置
1 2 3 4 5 6
| dialer := websocket.Dialer{TLSClientConfig: &tls.Config{RootCAs: nil, InsecureSkipVerify: true}} conn, _, err := dialer.Dial("wss://192.168.1.106:33002/", nil) if err != nil { log.Fatal(err) }
|
参考原文【go使用wss连接websocket服务器端,并发送数据,和接收服务器端不断传进来的消息】
- 附带一个js使用ws简历连接方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <!DOCTYPE html> <html> <head> <title>WebSocket Test</title> </head> <body> <script> var ws = new WebSocket("ws://192.168.1.106:33002/"); ws.onopen = function() { console.log("WebSocket connection opened.");
var arrBuffer = new ArrayBuffer(12); var dataView = new DataView(arrBuffer);
dataView.setUint16(0, 12, true); dataView.setUint16(2, 1, true); dataView.setUint32(4, 1, true); dataView.setUint16(8, 2, true); dataView.setUint16(10, -1004, true); ws.send(arrBuffer); }; ws.onmessage = function(event) { console.log("Received message: " + event.data); }; ws.onclose = function() { console.log("WebSocket connection closed."); }; ws.onerror = function(event) { console.log("WebSocket error: " + event.data); }; </script> </body> </html>
|