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不能使用,结果也还好最后解决了。

  • 相关阅读:
    阿里云CentOS安装firefox闪退
    error: QApplication: No such file or directory
    CentOS下自动登陆root帐户
    Linux下常用软件
    【记录】haphost免费vps初始配置
    检测Linux VPS是Xen、OpenVZ还是KVM真假方法
    使用VNC远程管理VPS(Centos系统)
    配置suricata
    NGUI的输入框制作(attach- input filed script的使用)
    NGUI技能CD效果制作(sprite的type:filled)
  • 原文地址:https://www.cnblogs.com/liwangwang/p/13516350.html
Copyright © 2011-2022 走看看