首先通过下面的链接下载openSSLhttps://slproweb.com/products...下载完成后,执行openssl进入交互界面:使用命令来generateprivatekey.pem1024表示1024位长度。opensslgenrsa-outprivatekey.pem1024生成的privatekey.pem,打开看看是什么样子的:什么是pem文件?.pem-在RFC1421到1424中定义,这是一种容器格式,可能仅包含公共证书(例如Apache安装和CA证书文件/etc/ssl/certs),或者可能包含整个证书链,包括公共证书密钥、私钥和根证书。令人困惑的是,它也可能编码CSR(例如此处使用的),因为PKCS10格式可以转换为PEM。该名称来自PrivacyEnhancedMail(PEM),这是一种失败的安全电子邮件方法,但它使用的容器格式仍然存在,并且是x509ASN.1密钥的base64转换。简单的说,就是一个密钥文件。第二步,根据第一步生成的密钥文件生成证书请求:opensslreq-new-keyprivatekey.pem-outcertrequest.csr如果懒得维护证书细节,回车即可默认值会自动填写:最后根据第一步生成的密钥和证书请求生成数字证书:当然,发证机构是自己,仅供测试。opensslx509-req-incertrequest.csr-signkeyprivatekey.pem-outcertificate.pem至此我们有了privatekey.pem和Certificate.pem两个证书。下面是我https服务器的代码,很简单,只有50行:varapp=require('express')();varfs=require('fs');varhttps=require('https');varhttpOptions={key:fs.readFileSync("keys/privatekey.pem"),cert:fs.readFileSync("keys/certificate.pem")}varserver=https.createServer(httpOptions,app);vario=require('socket.io')(server);console.log("httpsserverlistensonport8080...");server.listen(8080);functionprint_env(){console.log(process.env);}app.get('/',function(req,res){varresponse="HelloWorld";res.send(response);});app.get('/env',function(req,res){print_env();//res.sendFile(__dirname+'/index.html');varresponse=JSON.stringify(process.env);res.send(response);});app.get('/redis',function(req,res){varredisClient=require("./redisClient");functioncallback(response){//varresponse="ok";//JSON.stringify(process.env);res.send(response);}redisClient.test(callback);});io.on('connection',function(socket){console.log("connectcomingfromclient:"+socket.id);socket.emit('messages_jerry',{hello:'来自服务器的世界问候!'});socket.on('messages',function(data){console.log("从客户端收到的数据:"+JSON.stringify(data,2,2));});});从代码中不难理解这两个pem文件是如何在https服务器中使用的。最后在浏览器中测试一下。因为是自己颁发的证书,没有经过CA的验证,所以浏览器会显示警告。获取更多Jerry原创文章,请关注公众号“王子熙”:
