@

本次遇到的坑是在一个需求中的坑。

先讲一下问题背景吧:

首先本项目的一个请求是属于http,且部署是直接部署到公司内网中的项目(所以用ip+端口访问)。

本项目的需求坑为:使用websocket与后台建立长链接,定时接收后台消息,并使用Notification消息提示。

Notification: 使用Notification的时候在本地使用是没有任何毛病的,直到...部署到公司服务器(Centos7)上,就发现原本的Notification的消息提示没有了!!经过查找,才发现原来Chrome发布了新版本62,Notification API不再支持http,所以接下来就得把原本部署在tomcat上的服务请求给换成https请求。

换成https请求: 在切换的时候呢,发现很多博客的提议都是安装ngnix,要不就是购买域名下载证书..... 但是呢,一个身为内网中的项目需要个啥域名哦。所以就得自己生成一个证书,凑合着用就行了(生成证书的方式有很多种,这我会提供两种方式)

Websocket: 在把因为Notification而导致使用https之后的项目中,又出现了某个新问题...,就是Websocket又不能使用了,所以需要也需要找对应的解决方案。


一、http转为https请求

先说明证书的类别,不过我本次只会部署在tomcat上所以就需要jks的一个类型。

(1)生成证书1(crt证书转tomcat使用的jks)

第一步:生成一个带密码的私钥 :server.pass.key(需要输入一个4位以上的密码)

# genra	生成RSA私钥
# -des3 des3算法
# -out server.key (server.key 为生成的私钥文件名)
# 2048 私钥长度
openssl genrsa -des3 -out server.pass.key 2048

第二步:生成一个不带密码的私钥: server.key

openssl rsa -in server.pass.key -out server.key

第三步:生成一个证书签名请求: server.csr

# req 生成证书签名请求
# -new 新生成
# -key 私钥文件
# -out 生成的CSR文件
# -subj 生成CSR证书的参数
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=xdevops/OU=xdevops/CN=gitlab.xdevops.cn"

有需求改,没需求可以不改



第四步:生成自签名SSL证书:server.crt

# -days 证书有效期
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

X.509证书包含三个文件:key,csr,crt。

key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密

csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名

crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持> 有人的公钥,以及签署者的签名等信息

备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验> 证算法等。

第五步:生成jks 证书 :server.jks

openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name server
keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore server.jks

(2)配置证书1

    <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxHttpHeaderSize="3097152" maxPostSize="-1" URIEncoding="UTF-8" /> <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="/home/server.jks"
keystorePass="123456"
clientAuth="false" sslProtocol="TLS"
connectionTimeout="20000" />

(3)生成证书2

模板:

keytool -genkeypair -alias [user]  -keyalg [认证类型] -keystore [file]

我的:

keytool -genkey -alias tomcat -keyalg RSA -keystore /home/tomcat/conf/.keystore

常用参数介绍:

  • keytool -genkey :自动使用默认的算法生成公钥和私钥

  • -alias[名称]:给证书取个别名

  • -keyalg:制定密钥的算法,如果需要制定密钥的长度,可以再加上keysize参数,密钥长度默认为1024位,使用DSA算法时,密钥长度必须在512到1024之间,并且是64的整数倍

  • -keystore:参数可以指定密钥库的名称。密钥库其实是存放迷药和证书文件,密钥库对应的文件如果不存在会自动创建。

  • -validity:证书的有效日期,默认是90天

  • -keypass: changeit:不添加证书密码

  • -storepass changeit:不添加存储证书的密码

(4)配置证书2

    <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxHttpHeaderSize="3097152" maxPostSize="-1" URIEncoding="UTF-8" /> <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/home/tomcat/conf/.keystore"
type="RSA" certificateKeystorePassword="123456" />
</SSLHostConfig>
</Connector>

二、Websocket改为https连接

有点简单:就把原来的ws 给改为wss

后言

额,在开始的时候是因为不知道为什么notifcation不能使用,结果也还好最后解决了。

当Notification和Websocket遇到https、http的更多相关文章

  1. 微信小游戏websocket支持https/wss

    公司新项目需要支持wss,解决方法如下: https://blog.csdn.net/peter_teng/article/details/82866613 proxy_pass http://web ...

  2. centos下使用nginx 配置websocket,https升级wss协议

    服务端代码/***/ // 服务端代码 var express = require('express'); var app = express(); var path = require('path' ...

  3. tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南(含nginx/https支持)

    之所以sockjs会存在,说得不好听点,就是因为微软是个流氓,现在使用windows 7的系统仍然有近半,而windows 7默认自带的是ie 8,有些会自动更新到ie 9,但是大部分非IT用户其实都 ...

  4. websocket心跳重连 websocket-heartbeat-js

    初探和实现websocket心跳重连(npm: websocket-heartbeat-js) 心跳重连缘由 websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间 ...

  5. websocket与socket.io

    什么是Websocket? Websocket是一个独立于http的实时通信协议,最初是在HTML5中被引用进来的,在HTML5规范中作为浏览器与服务器的核心通信技术被嵌入到浏览器中.WebSocke ...

  6. Websocket通讯简析

    什么是Websocket Websocket是一种全新的协议,不属于HTTP无状态协议,协议名为"ws",这意味着一个Websocket连接地址会是这样的写法:ws://**.We ...

  7. tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南

    之所以sockjs会存在,说得不好听点,就是因为微软是个流氓,现在使用windows 7的系统仍然有近半,而windows 7默认自带的是ie 8,有些会自动更新到ie 9,但是大部分非IT用户其实都 ...

  8. PHP Socket实现websocket(一)基本函数介绍

    WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 一开始的握手需要借助HTTP请求完成. WebSocket是基于TCP来实 ...

  9. 【转】Spring websocket 使用

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html https://spr ...

随机推荐

  1. 数据湖应用解析:Spark on Elasticsearch一致性问题

    摘要:脏数据对数据计算的正确性带来了很严重的影响.因此,我们需要探索一种方法,能够实现Spark写入Elasticsearch数据的可靠性与正确性. 概述 Spark与Elasticsearch(es ...

  2. Java 异常处理专题,从入门到精通

    内置异常和Throwable核心方法 Java内置异常 可查异常(必须要在方法里面捕获或者抛出) ClassNoFoundException 应⽤程序试图加载类,找不到对应的类 IllegalAcce ...

  3. 人工智能?.netcore一样胜任!

    提起AI,大家都会先想到Python,确实Python作为一门好几十年的老语言,上一波的AI大流行使它焕发了青春.大家用Phtyon来做AI,最主要的原因无非就是编码量更少,很多数学和AI相关的Api ...

  4. Seaborn实现多变量分析

    import seaborn as sns import numpy as np import pandas as pd import matplotlib.pyplot as plt sns.set ...

  5. 9-Pandas之数据合并与轴向连接(pd.concat()的详解)

    数据合并:由于数据可能是不同的格式,且来自不同的数据源,为了方便之后的处理与加工,需要将不同的数据转换成一个DataFrame. Numpy中的concatenate().vstack().hstac ...

  6. PHP xml_set_element_handler() 函数

    定义和用法 xml_set_element_handler() 函数规定在 XML 文档中元素的起始和终止调用的函数. 如果成功,该函数则返回 TRUE.如果失败,则返回 FALSE.高佣联盟 www ...

  7. CF802C Heidi and Library hard 费用流 区间k覆盖问题

    LINK:Heidi and Library 先说一下简单版本的 就是权值都为1. 一直无脑加书 然后发现会引起冲突,可以发现此时需要扔掉一本书. 扔掉的话 可以考虑扔掉哪一本是最优的 可以发现扔掉n ...

  8. 5.19 省选模拟赛 小B的图 最小生成树 LCT

    LINK:小B的图 这道题就比较容易了. 容易想到将询问离线 然后 从小到大排序 那么显然是优先放正图(x+k)的边. 考虑随着x的增大 那么负图上的边会逐渐加进来 一条边被加进来当且仅当 其权值小于 ...

  9. MyBatis-Plus使用(2)-CRUD接口

    参考文档:https://mybatis.plus/guide/crud-interface.html MyBatis-Plus自带的CRUD方法分为Mapper层和Service层,大多数功能是重叠 ...

  10. Angular 10材质的模态弹出示例和教程

    在本教程中,我们将通过示例使用Angular 10材质构建模式弹出窗口. 在这里,我们将研究创建Angular 10项目,安装和设置Angular 10材质,以及创建自定义材质模块文件. 在本教程中, ...