Websocket是基于Http的一种长连接方案,一些简单的IM产品会基于Websocket实现 但是如果聊天的内容比较敏感,比如在Websocket通道中聊天内容如果涉及到卡密、金钱等信息,那一定要对Websocket的传输进行保护。

https或者wss是最基本的防嗅探和传输加密方式,这里演示下如何配置wss的多种方式;

本文知识点:

  • p12格式文件与证书文件介绍
  • 如何生成p12文件和证书文件,以及如何互相转换
  • Nginx如何配置Https
  • Spring Boot如何配置Https?
  • WSS如何配置和使用?

过程

证书和p12基本概念

证书一般包含两个文件:

  • 证书文件,可以理解为公钥,用户访问的时候发给用户的
  • 私钥文件,在数据传输过程中对公钥加密的内容进行解密

p12为是保存私钥和证书的组合格式,同时包含了公钥和私钥内容。p12文件和证书可以互相转换。

转换方式如下:

# 私钥和证书生成p12文件
openssl pkcs12 -inkey PRIVATE_TEST.key -in PUBLIC_TEST.pem -export -out TEST.p12# p12文件生成证书和私钥
openssl pkcs12 -nokeys -in TEST.p12 -out PUBLIC_TEST.pem
openssl pkcs12 -nocerts -nodes -in TEST.p12 -out PRIVATE_TEST.key

生成证书和p12文件

如果想要使用wss,首先要有个证书才行,证书有两种来源:

  • CA机构颁发,当然目前各种云产品都会帮我们做掉这个事情,阿里云上如果有购买域名,可以申请免费的证书
  • 自己签名证书,使用OpenSSL,keytools,或者Mac的钥匙串;

阿里云

在阿里云的菜单下面,安全部分,有个SSL证书

因为阿里云的证书要收费,我们考虑一些便宜又简单的方案

openssl

如果在Nginx中使用:

直接生成公钥和私钥:

openssl req -newkey rsa:2048 -sha256 -nodes -keyout PRIVATE_TEST.key -x509 -days 365 -out PUBLIC_TEST.pem -subj "/C=NG/ST=Lagos/L=Lagos/O=YOUR_ORG_NAME_HERE/CN=test.aihe.space"

将公钥和私钥转为P12格式

openssl pkcs12 -inkey PRIVATE_TEST.key -in PUBLIC_TEST.pem -export -out TEST.p12

keytool

# 生成一个jks格式的证书文件,
keytool -genkeypair -alias tomcat -keyalg RSA -keystore wss.jks# 将JKS的文件,转换为p12格式的文件;
keytool -importkeystore -srckeystore wss.jks -destkeystore wss.p12 -deststoretype pkcs12# 从P12的文件中提取证书和提取私钥
openssl pkcs12 -nokeys -in wss.p12 -out wss.pem
openssl pkcs12 -nocerts -nodes -in wss.p12 -out wss.private.key

如果要在Nginx中使用,方式一样:

ssl_certificate "cert/wss.pem";
ssl_certificate_key "cert/wss.private.key";

Mac钥匙串

导出为P12格式之后仍然按照老方式:

openssl pkcs12 -nokeys -in aihetest0916.p12 -out aihetest.pem
openssl pkcs12 -nocerts -nodes -in aihetest0916.p12 -out aihetest.key

Nginx配置Https-公私钥方式

在nginx下添加如下内容:在nginx.conf文件中,或者nginx配置目录下conf.d种新建一个文件都可以。

 server {listen 443 ssl ;listen [::]:443 ssl ;server_namessl.aihe.space;root /usr/share/nginx/html;ssl_certificate "cert/wss.pem";ssl_certificate_key "cert/wss.private.key";ssl_session_cache shared:SSL:1m;ssl_session_timeout10m;#ssl_ciphers PROFILE=SYSTEM;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:<img src="http_version 1.1; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host$host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade;  # 这里配置了反向代理服务器的地址 proxy_passhttp://127.0.0.1:8080;}}" style="margin: auto" />

在Safari浏览器上可以看到证书信息,网站访问也是生效的,谷歌浏览器如果遇到自签名证书不让访问,相对麻烦,所以还是用Safari浏览器。

SpringBoot配置Https-使用P12文件

1、将生成好的P12文件拷贝到resource目录下; 2、配置application.properties文件

#server.port=443
server.ssl.key-store=classpath:aihetest0916.p12
server.ssl.key-store-password=123456
server.ssl.key-password=123456
server.ssl.key-alias=aihetest0916

3、启动查看效果;

WSS配置和使用

Wss是基于Https的,如果已经配置好了Https:

  • 在Nginx中反向代理https到后端的http服务器即可,http服务器有Websocket。
  • 直连SpringBoot的WSS应用,让SpringBoot配置支持HTTPS

在Spring Boot中的Websocket代码:

@Configuration
@Slf4j
public class WebSocketConfig implements WebSocketConfigurer {@AutowiredList<HandshakeInterceptor> handshakeInterceptorList;@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(new DemoTextWebSocketHandler(), "/websocket-spring").setAllowedOrigins("*");}private static class DemoTextWebSocketHandler extends TextWebSocketHandler {@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {log.info("建立连接 {}", session.getId());super.afterConnectionEstablished(session);TextMessage textMessage = new TextMessage("建立连接:" + session.getId());session.sendMessage(textMessage);}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {super.handleTextMessage(session, message);log.info("处理收到的数据:{}", new String(message.asBytes()));session.sendMessage(new TextMessage("收到:" + new String(message.asBytes())));}}
}

测试本地访问:

测试Nginx反向代理

总结

1.现在证书配置有两种常见文件,p12文件和公钥私钥方式,p12只是把公钥和私钥组合了一下,p12和公钥私钥可以互相转换。
2.Nginx配置Https使用公钥和私钥的方式
3.SpringBoot应用中可以直接使用p12文件格式配置Https
4.WSS加密其实只需要把Https功能配置好就行;在nginx反向代理中需要nginx支持下websocket的功能,在spring boot中默认就支持;
5.演示了几种生成证书的方式:阿里云、openssl、keytool、以及Mac电脑的钥匙串也可以创建对应的证书文件。

参考

  • www.serverlab.ca/tutorials/l…
  • gist.github.com/alexishida/…
    target=https%3A%2F%2Fgist.github.com%2Falexishida%2F607cca2e51ec356b1fe1909047ec70fd “https://gist.github.com/alexishida/607cca2e51ec356b1fe1909047ec70fd”)
  • 如何配置https:cloud.tencent.com/developer/a…

Https、Wss加密实践相关推荐

  1. 某面试官吐槽:面试某大龄程序员,问HTTPS的加密过程,对方却答不出来!网友:这个问题毫无意义!...

    大龄程序员面试时会遭遇什么窘境? 一个面试官发帖吐槽:刚才面了一个毕业15年的开发,自己并没有要坑大龄程序员的意思,只是问了一个https的加密过程,结果那个大龄程序员支支吾吾没答出关键,真怕自己以后 ...

  2. 基于 Nginx 的 HTTPS 性能优化实践

    前言 分享一个卓见云的较多客户遇到HTTPS优化案例. 随着相关浏览器对HTTP协议的"不安全".红色页面警告等严格措施的出台,以及向 iOS 应用的 ATS 要求和微信.支付宝小 ...

  3. iOS ASIHTTPRequest用https协议加密请求

    iOS 终端请求服务端数据时,为了保证数据安全,我们一般会使用https协议加密,而对于iOS的网络编程,我们一般会使用开源框架:ASIHTTPRequest,但是如果使用传统的http方式,即使忽略 ...

  4. 对称加密(4) NET对称加密实践

    对称加密(4) NET对称加密实践 在使用.NET框架提供的加密算法实现类来执行加密任务时,需要准备加密密钥和初始化向量(Initialization Vector,IV).基于对称加密的特点,在加密 ...

  5. AFNetworking 对数据进行https ssl加密

    参考来源:http://www.cnblogs.com/jys509/p/5001566.html 现在在工作中的工作需求:https请求验证证书 一般来讲如果app用了web service , 我 ...

  6. 图解HTTPS协议加密解密全过程

    为什么80%的码农都做不了架构师?>>>    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. ...

  7. HTTPS 到底加密了什么?

    关于 HTTP 和 HTTPS 这个老生常谈的话题,我们之前已经写过很多文章了,比如这篇<从HTTP到HTTPS再到HSTS>,详细讲解了 HTTP 和 HTTPS 的进化之路,对的没错, ...

  8. 最通俗易懂的讲解HTTPS的加密原理【多图、易懂】

    目录 前言 HTTPS加密原理概述 HTTP 为什么不安全 安全通信的四大原则 HTTPS 通信原理 对称加密:HTTPS 的最终加密形式 非对称加密:解决单向的对称密钥的传输问题 数字证书:解决公钥 ...

  9. Nginx之配置https/wss

    需求 一般我们开发的应用程序,部署的时候使用的是http/ws协议,明文的,不安全.怎样让它安全的通过互联网传输呢? 解决 通过 nginx 在客户端和服务端做一个转发,客户端通过 https/wss ...

最新文章

  1. 2022-2028年中国汽车印制电路板(汽车PCB)产业深度调研及投资前景预测报告
  2. 「golang」panic: commands out of sync. Did you run multiple statements at once
  3. 简述python程序结构_python架构的概念讲解
  4. git fetch与git pull的区别
  5. 系统架构师设计师2009-2016真题与模拟题汇总免费下载
  6. boost::hana::filter用法的测试程序
  7. 来吧~不要互相伤害,ssh之间要互相信任
  8. OS X上搭建distcc使用XCode进行分布式编译
  9. TensorFlow tf.keras.backend.ctc_batch_cost
  10. 粤港澳大湾区落地首家技术VC,创新工场25亿加持,做投资也做AI研发
  11. PyTorch学习笔记(一):PyTorch环境安装
  12. Joyoshare VidiKit教程:如何将字幕添加到WMV电影中?
  13. autotools 学习
  14. linux下SVN CVS命令大全
  15. C# 将PDF转为Word、Html、XPS、SVG、PCL、PS——基于Spire.Cloud.PDF.SDK
  16. 华为手机怎么移除云盘内容_华为手机网盘怎么样删除
  17. caj转pdf的方法
  18. JESD 样本量 选择 可靠性 45 77样本量
  19. python画聚类树状图_如何在scipy/matplotlib中绘制和标注层次聚类树状图
  20. 东北大学材料成型工艺学中期末复习

热门文章

  1. 向工程腐化开炮 | 治理思路全解
  2. 为什么喧闹过后,京东还是市值第四的中国互联网公司?
  3. plsql 复制表结构到指定表空间_数据库知识总结—(八)数据库amp;表的CRUD
  4. 九校联考-长沙市一中NOIP模拟Day2T2 走格子(cell)
  5. XV6 RISC-V 源码阅读报告之进程模型
  6. Seaborn数据可视化
  7. 具有跳跃性思维的算法
  8. Android自定义View之数字密码锁
  9. com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method XXX in the service
  10. YTU 2914: xiaoping学构造函数