我有一个在https://localhost:7001运行的REST API服务器。这个使用JKS密钥库来配置https。
gulp + browser-sync +代理中间件的组合,用于在https://localhost:3000处提升服务静态内容的服务器。对https://localhost:3000/api的所有请求都代理https://localhost:7001/api。
但是,我收到了这个错误:
Error: self signed certificate
at Error (native)
at TLSSocket.<anonymous> (_tls_wrap.js:1060:38)
at emitNone (events.js:86:13)
at TLSSocket.emit (events.js:185:7)
at TLSSocket._finishInit (_tls_wrap.js:584:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:416:38)
在我看来,错误的发生是因为(1.)中的REST API服务器和(2.)中的静态服务器为其HTTPS配置使用不同的证书。
(1.)中的REST API服务器使用自签名的JKS密钥库进行https。
我相信(2.)中的静态服务器使用浏览器同步附带的默认自签名证书。
所以这两个证书是不同的。这是我对错误原因的猜测。
知道如何解决这个问题吗?如果我的猜测是错误的,那么错误的真正原因是什么?
我找不到任何关于如何使用JKS作为具有浏览器同步的静态服务器的证书的说明。在https://browsersync.io/docs/options中,有关于如何将证书放入浏览器同步的说明,但这是一种不同类型的证书,并且没有密码字段:
// Enable HTTPS mode with custom certificates
browserSync({
server: "./app",
https: {
key: "path-to-custom.key",
cert: "path-to-custom.crt"
}
});
所以我仍然无能为力。 非常感谢任何建议。
我的gulp.js文件供参考:
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
var url = require('url');
var proxy = require('proxy-middleware');
gulp.task('browserSync', function() {
var proxyOptions = url.parse('https://localhost:7001/api/');
proxyOptions.route = '/api';
// requests to `https://localhost:3000/api/x/y/z` are proxied to `https://localhost:7001/api/x/y/`
browserSync.init({ //initialize a server with the given directory
open: true,
port: 3000,
https: true,
server: {
baseDir: '.',
middleware: [proxy(proxyOptions)]
}
});
});
gulp.task('watch', ['browserSync'], function() {
gulp.watch('app/*.html', browserSync.reload);
gulp.watch('app/**/*.html', browserSync.reload);
gulp.watch('app/**/*.js', browserSync.reload);
});