需求:
最近在测试在网页端(HTML5)调用移动设备的定位等权限功能,发现某些功能是必须保证域名在https下的否则会出现不正常现象。
解决:
1.在线生成和证书
访问:CSR文件生成工具-中国数字证书CHINASSL
填写好之后点生成即可,我们可以下载到两个文件。
这里我的域名是192.168.3.151,得到192.168.3.151_csr.txt
和192.168.3.151_key.txt
这两个文件(妥善保存)。
然后再访问:自签名免费SSL证书签发-中国数字证书CHINASSL
把192.168.3.151_csr.txt
文件里的内容粘贴到代码框里,点获取免费证书之后可以下载到一个192.168.3.151_ssl.crt
文件。
2.配置Node.js
参考Node.js配置源,确保已经配置好npm了。
安装express、fs、https
模块:【必须】
npm install express --save | |
npm install fs --save | |
npm install https --save |
安装express
模块的相关依赖(可选):
npm install body-parser --save | |
npm install cookie-parser --save | |
npm install multer --save |
安装完成后可以查看express
的版本号:
npm list express |
3.拷贝相关文件
把192.168.3.151_key.txt
和192.168.3.151_ssl.crt
(名字可能不同,但是格式是这样的)复制到你服务器程序同级目录下,比如我的目录就这三个文件:
192.168.3.151_key.txt | |
192.168.3.151_ssl.crt | |
app.js |
app.js
//导入模块
const fs = require('fs')// 文件输入输出,用来导入证书
const https = require('https')// https服务器
const express = require('express')// express模块导入
//读取证书
const privateKey = fs.readFileSync('192.168.3.151_key.txt', 'utf8')
const certificate = fs.readFileSync('192.168.3.151_ssl.crt', 'utf8')
// 创建 express 应用
const app = express()
// 监听 / 路径的 get 请求
app.get('/', function(req, res) {
res.send('Hello Word!')
})
const credentials = { key: privateKey, cert: certificate }
const httpsServer = https.createServer(credentials, app)
const SSLPORT = 8080
httpsServer.listen(SSLPORT, function() {
console.log('HTTPS 服务器已运行在: https://192.168.3.151:%s', SSLPORT)
})
使用Node.js运行app.js
在VSCode中新建一个终端,然后指定到当前的项目根目录,前提是这个项目已经是个完整功能的Vue项目,输入node app.js。提示运行在某个地址 说明已经成功启动https服务器。
然后在vue.config.js中加入一些代码:配置好主机端口和本地地址,https设为true
然后再新建一个终端,用于启动我们的Vue项目:
如果无报错,则会成功启动,域名变成了设置的localhost地址,端口号变成了8081,直接访问该地址,显示如下图页面类似就成功了,地址是借来的,凑合看吧。类似安全提示需点击继续访问即可。
设置信任这个证书就可以了~