前后端分离项目 vue+node文件服务器 + springboot 后端 内网系统http部署https

前后端分离项目 vue+node文件服务器 + springboot 后端 内网系统http部署https

近期项目中使用了一个浏览器的新特性 window.Notification用于调用 操作系统通知信息,
结果发现在本地 服务中可以使用,但是到了服务端 就无法使用,经查证,chrome在 6x+版本以后就已经禁用 http 协议网站下使用 该特性,不得已需要升级到https,常理来说,升级https在云服务商申请免费的ssl证书即可,但是内网系统要个锤子申请证书,遂采用自签名证书方式,此方法适用于node作为文件服务器,springboot提供api接口的 前后端分离项目。

node端 使用openssl 生成证书,mac 环境下基本自带。

运行命令 :

  1. openssl genrsa -out privatekey.pem 1024
  2. openssl req -new -key privatekey.pem -out certrequest.csr
    • 会提示问题,在Country Name中填入cn,其余全部回车跳过
  3. openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem

此时 终端所在目录下会多出三个文件certifficate.pem,certrequest.csr ,privatekey.pem
把这三个文件 复制到 node 目录
以下内容使用原生node实现

const http = require('http')
const fs = require('fs')
const https = require('https');

const options = {
  key: fs.readFileSync('./privatekey.pem'),
  cert: fs.readFileSync('./certificate.pem')
}

http.createServer((req, res) => {
//如果使用http进入则重定向至https
  res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url });
  res.end();
}).listen(80, () => {
  console.log('HTTP Server is running on: http://localhost:%s', 80);
})

https.createServer(options,function(req, res) {
   //文件服务器代码
 
}).listen(443, function() {
  console.log('linsten  in  443')
})

因为https网站不能访问http的接口内容,所以后端也需要升级。
此时node端即可实现https访问,现在配置后端,后端我使用 JDK自带的 keytool

执行命令
keytool -genkey -alias https -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
- alias 后面跟的是证书别名
- storetype 指定密钥仓库类型
- keyalg 生证书的算法名称
- keysize 证书大小
- keystore 生成的证书文件的存储路径和文件名
- validity 证书的有效期
执行后输入自定义的秘钥,然后回车全部空,最后提示 是否的时候输入是, 假如是英文的yes/no 输入yes
此时会在指定目录下生成 keystore.p12 文件

将此文件复制至项目根目录 resource文件夹下
在 application.properties 配置文件中 添加如下配置

server.ssl.key-alias=https   #生成证书时的别名
server.ssl.key-store=classpath:keystore.p12  #生成的证书的名称
server.ssl.key-store-password=          #生成证书时输入的密码
server.ssl.key-store-type=PKCS12

后端如果想要http也自动转发到https自行配置

至此基本大功告成,如果启动的时候文件找不到,相应自己百度,在pom中设置plugin解决,
但是假如你的jdk版本过低,也是会报错 ObjectIdentifier() – data isn’t an object ID (tag = 48)
此时需要升级版本,我这里 1.8.0_321 就已经可以支持了,但至少哪个版本我不清楚,

最后前后端都启动了,就可以使用https了,但是浏览器会提示不安全,忽略它要继续进入,然后你就会发现,页面出来了,api接口会出错,打开控制台一看报错 NET::ERR_CERT_AUTHORITY_INVALID 此时把你的后端api地址输入到浏览器里,浏览器再次 询问是否仍要连接,选择仍要连接,即可,其他方法自行百度。

你可能感兴趣的:(Linux,http,vue.js,服务器)