ExpressローカルテストHTTPS

2357 ワード

私の環境

  • アマゾン(AWS)のubuntu仮想マシンです.
  • node
  • openssl

  • 証明書の生成


    次のコマンドを入力すると、現在のフォルダにlocalhostが生成されます.キーとlocalhost.cert.
    openssl genrsa -out localhost.key 2048
    openssl req -new -x509 -key localhost.key -out localhost.cert -days 3650 -subj /CN=localhost
    

    ここでlocalhostはドメイン名です.他のドメイン名に変更するには、上のすべてのlocalhostを直接ドメイン名に変更します.
    私を例にとると、私の仮想マシンのドメイン名はxxx.compute.amazonaws.comで、このドメイン名で上のすべてのlocalhostを置き換えると、ec2-34-220-96-9.us-west-2.compute.amazonaws.com.keyec2-34-220-96-9.us-west-2.compute.amazonaws.com.certの2つのファイルが生成されます.
    更新openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365秘密鍵をパスワードで保護したくない場合は、-nodesを加える.-subj '/CN=localhost'を加えるcertificateの内容を設定することができる.そのうちのlocalhostをドメイン名に置き換えます.
    参考:How to create a self-signed certificate with openssl?

    コード#コード#


    次のコードを実行するには、パッケージをインストールする必要があります.
    npm init
    npm i -S https express
    

    ファイルを作成するjs、内容は以下の通りである.
    #!/usr/bin/env node
    
    var https = require('https');
    var fs = require('fs');
    var express = require('express');
    
    var host = 'xxx.compute.amazonaws.com'; // Input you domain name here.
    var options = {
        key: fs.readFileSync( './' + host + '.key' ),
        cert: fs.readFileSync( './' + host + '.cert' ),
        requestCert: false,
        rejectUnauthorized: false
    };
    
    var httpApp = express();
    var app = express();
    app.get('/', function (req, res) {
      res.send('hi HTTPS');
    });
    httpApp.get('/', function (req, res) {
      res.send('hi HTTP');
    });
    httpApp.listen(80, function () {
      console.log('http on 80');
    });
    var server = https.createServer( options, app );
    
    server.listen( 443, function () {
        console.log( 'https on 443' );
    } );
    

    サーバの起動

    sudo node index.js
    

    アクセス


    ブラウザにhttp://xxx.compute.amazonaws.com/と入力と、80ポートでHTTPサーバにアクセスする.hi HTTPが表示する.
    入力https://xxx.compute.amazonaws.com/は、443ポートでHTTPSサーバにアクセスし、hi HTTPSを表示する.

    リファレンス


    Self-Signed, Trusted Certificates for Node.js & Express.js