前言:
目前小伙伴们对“node serverjs”都比较注意,咱们都想要学习一些“node serverjs”的相关文章。那么小编在网上搜集了一些有关“node serverjs””的相关资讯,希望小伙伴们能喜欢,兄弟们一起来学习一下吧!本文将使用Nodejs的TLS模块、用net.createServer()可法,创建一个加密通讯的TCP服务器(https服务器)
SSL证书
进行SSL通信,SSL公钥、私钥证书是必备的。
当前,免费ssl证书的获取方法已经很多,不过一般只能获取独立网站的证书。泛域名、多域名证书一般还是付费的。
如下例,网站从synmatec获取了免费证书。从域名的证书管理中下载它。
下载会得到两个文件,一个key、一个pem。
key文件是服务器私钥文件,pem文件是服务器证书key。
编程时,会用到这两个文件。
程序
服务器程序如下:
var tls = require('tls');var fs = require('fs');var options = { key: fs.readFileSync('./jshaman.com.key'), cert: fs.readFileSync('./jshaman.com.pem'),};var server = tls.createServer(options, function(cleartextStream){ console.log("connected") cleartextStream.write("welcome"); cleartextStream.setEncoding("utf8"); cleartextStream.pipe(cleartextStream);});server.listen(8000,function(){ console.log("server listening");});
代码很简单,看过之前文章的话,应该对这类代码很熟悉。差异之处在于options,这个参数中包含了私钥和证书内容,在创建服务器时会将这个参数传入。
运行
用nodejs启动,即在本机8000端口建立监听。
用浏览器访问效果如下:
注意:需要用https访问,不是http了。
本例中使用的是火狐,访问时有警告信息,因为证书并不是针对127.0.0.1的,属于证书不匹配警告。
选择接受风险就可以访问了:
SSL客户端
再进一步,写一个ssl客户端对上面的服务器进行访问。
代码如下:
var tls = require('tls');var fs = require('fs');var options = { key: fs.readFileSync('./jshaman.com.key'), cert: fs.readFileSync('./jshaman.com.pem'), servername:";};var cleartextStream = tls.connect(8000,options, function(){ console.log("connected to server") process.stdin.pipe(cleartextStream);});cleartextStream.setEncoding("utf8");cleartextStream.on("data",function(data){ console.log(data);});
代码解读:
客户端用tls.connect()方法去连接服务器。
参数options中除了包含刚才用到的key、pem文件内容,还加了一个参数:
servername,这个名称必须与服务器端的证书名称相对。
解释:
本文用的证书,是这个网站的,所以key和pem文件中都是这个域名的信息。那么在这里,servername名称也必须用这个。否则连接会不成功。
执行效果:
如果把上面代码中域名改为,运行效果将会是:
https服务器
上面的例子中,是用tls创建了一个tcp加密服务器。
接下来,再讲一段,如何用https创建https服务器。
疑问:tcp加密服务器、https服务器,一回事吗?
这样理解:ssl加密通信服务器,可以有多种。比如可以是web服务器,也可能是邮件服务器。
且看代码:
var fs = require('fs');var https = require("https");var options = { key: fs.readFileSync('./jshaman.com.key'), cert: fs.readFileSync('./jshaman.com.pem'),};var server = https.createServer(options, function(req,res){ console.log("connected") res.write("welcome"); res.end();});server.listen(8000,function(){ console.log("server listening");});
执行效果:
更多本系列文章:
Node.JS实战18:创建DNS请求、查询域名IP
Node.JS实战17:开发一个正向代理服务器
Node.js实战16:用http模块创建web服务器
标签: #node serverjs