使用本地https服务器

时间:2017-07-19 18:55:59

标签: javascript https gulp certificate browser-sync

  1. 我有一个在https://localhost:7001运行的REST API服务器。这个使用JKS密钥库来配置https。

  2. gulp + browser-sync +代理中间件的组合,用于在https://localhost:3000处提升服务静态内容的服务器。对https://localhost:3000/api的所有请求都代理https://localhost:7001/api

  3. 但是,我收到了这个错误:

    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);
    });
    

0 个答案:

没有答案