zoukankan      html  css  js  c++  java
  • 当Notification和Websocket遇到https、http

    @


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

    如果是自己在内网使用却因为有些功能必须需要https连接的话,可以通过以下两种方式给自己的ip加上个https

    先讲一下问题背景吧:
    首先本项目的一个请求是属于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 (tomcat/conf/server.xml)

        <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 (tomcat自生成keystore证书库)

    模板:

    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 (tomcat/conf/server.xml)

        <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
    在这里插入图片描述

    后言

    以上两种生成ssl证书方式经过测试都是可行的,

    如果是自己在内网使用却因为有些功能必须需要https连接的话,可以通过这种方式给自己的ip加上个https

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

  • 相关阅读:
    POJ 3710 Christmas Game#经典图SG博弈
    POJ 2599 A funny game#树形SG(DFS实现)
    POJ 2425 A Chess Game#树形SG
    LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
    LeetCode Array Easy121. Best Time to Buy and Sell Stock
    LeetCode Array Easy 119. Pascal's Triangle II
    LeetCode Array Easy 118. Pascal's Triangle
    LeetCode Array Easy 88. Merge Sorted Array
    ASP.NET MVC 学习笔记之 MVC + EF中的EO DTO ViewModel
    ASP.NET MVC 学习笔记之面向切面编程与过滤器
  • 原文地址:https://www.cnblogs.com/liwangwang/p/13516350.html
Copyright © 2011-2022 走看看