构建nodejs SSL服务器的备忘单

這裡是說明文件
Node.js 伺服器建置小抄

节点SSL服务器速查表

构成

├ server.js
├ package.json # 与构建 Node.js 服务器的备忘单相同
├ download.txt # 用于下载的文件,内容可以是任意的
└ cert
├ server.cnf
├ server.crt
└ server.key

'use strict';
var log4js = require('log4js');
var logger = log4js.getLogger('test');
log4js.configure({ appenders: { default: { type: "console", layout: { type: "basic" } } }, categories: { default: { appenders: ['default'], level: 'debug' }}, replaceConsole: true, level: 'info' })
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
var https = require('https');
var fs = require('fs');
var options = {
  key:  fs.readFileSync(__dirname +'/cert/server.key'),
  cert: fs.readFileSync(__dirname +'/cert/server.crt')
};
var util = require('util');
var host = 'localhost'; 
var port = 8443;

app.use( function(req,res,next) {
	logger.info('%s %s', req.method, req.url);
	logger.info('header='+JSON.stringify(req.headers));
	logger.info('query='+JSON.stringify(req.query));
	logger.info('body='+JSON.stringify(req.body));
	next();
});

var server = https.createServer(options,app).listen(port, function() {});
console.log('*** server start https://%s:%s ***',host,port);
logger.info('*** server start https://%s:%s ***',host,port);
server.timeout = 30000;
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0; // オレオレ証明書サーバへリクエストする場合

// top page
app.all('/', function(req, res) { // methodを限定しない
	res.header({'Content-type': 'text/html'});
	res.end(util.format('<h1>http://%s:%s for honya</h1>',host,port)); // サーバの用途が分かるようなタイトルを表示する
});

// json を返す場合 REST形式
app.all('/rest/v1/user/:id', function(req,res) { 
	logger.info('id='+req.params.id); // url パラメータの参照

	let json = {
		id: req.params.id,
		name: "honya",
		dob: (new Date('2020-01-01 12:34:56')).getTime(),
	}
	res.status(201).json(json);
});

// html を返す場合 ASP.NET形式
app.all('/asp/honya.asmx', function(req,res) {
	let html = `
<html>
<body>
	<h1>request url: ${req.method} ${req.url}</h1>
	<div>response</div>
</body>
</html>
`;
	res.end(html); 
});

// 存在するファイルをダウンロードする場合 cgi形式
app.all('/cgi-bin/honya.cgi', function(req,res) { 
	res.download(__dirname + '/download.txt','server.log'); 
});

// csvデータをダウンロードする場合 php形式
app.all('/php/honya.php', function(req,res) { 
	let header = {
		'Content-disposition': 'attachment; filename=server.csv',
		'Content-type': 'text/plain; charset=utf-8',
	}
	res.header(header);

	let csv = "id,name\n1,honya\n";
	res.send(csv); 
});
[req]
distinguished_name = req_distinguished_name
x509_extensions = SAN
prompt = no

[req_distinguished_name]
C = Country initials like US, RO, GE
ST = State
L = Location
O = Organization Name
OU = Organizational Unit 
CN = localhost

[SAN]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

通过命令创建 server.crt 和 server.key。

cd ~/cert # 証明書フォルダへ移動
openssl req \
  -newkey     rsa:4096 \
  -keyout     server.key \
  -x509 \
  -nodes \
  -out        server.crt \
  -subj       "//CN=localhost" \
  -days       3650 \
  -reqexts    SAN \
  -extensions SAN \
  -config     server.cnf

开始
启动

使用 Node.js 架设服务器的备忘录一样

一直保持启动

与 “nodejs 服务器搭建备忘单 相同” 的中文释义.

本地主机 SSL证书

请看以下内容

请参考以下步骤6来导入证书:
为本地主机创建一个受信任的自签名SSL证书
※导入后,请不要忘记重启浏览器 σ(゚∀゚ )オレ

bannerAds