<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Node.js 搭建 HTTPS 服務(wù)器

          共 2380字,需瀏覽 5分鐘

           ·

          2021-01-05 10:40

          今日文章由 “Node.js技術(shù)棧@五月君” 授權(quán)分享,正文從下面開始~

          在 Node.js 中開啟一個 HTTP 服務(wù)很簡單,如果想使用 Node.js 開啟一個 HTTPS 的服務(wù)需要兩步:一是生成簽名證書,二是還需借助 Node.js 提供的系統(tǒng)模塊 HTTPS 完成。

          自簽名證書

          通常在企業(yè)中面向公網(wǎng)使用的證書通常是由全球權(quán)威 CA 機(jī)構(gòu)簽發(fā)的證書,受各大瀏覽器廠商信任。在開發(fā)測試時為了簡單點(diǎn)我們可以自簽名證書,但是這在瀏覽器中打開時會有安全問題提示。

          使用 openssl 工具生成自簽名證書。

          簡單分為以下幾個步驟:

          1. 使用 openssl 的 genrsa 命令生成一個服務(wù)器私鑰文件
          #?genrsa?生成密鑰
          #?-out?指定輸出的文件
          openssl?genrsa?-out?server.key?2048
          1. 生成證書請求文件
          #?-new?執(zhí)行生成新的證書請求
          #?-key?指定輸入的密鑰
          openssl?req?-new?-key?server.key?-out?server.csr

          #?會有以下交互提示,Common Name 這個可以自定域名,修改 hosts 文件域名映射即可。
          Country?Name?(2?letter?code)?[]:CN
          State?or?Province?Name?(full?name)?[]:ShangHai
          Locality?Name?(eg,?city)?[]:ShangHai
          Organization?Name?(eg,?company)?[]:Node.js
          Organizational?Unit?Name?(eg,?section)?[]:
          Common?Name?(eg,?fully?qualified?host?name)?[]:test.https.com
          Email?Address?[]:
          1. 根據(jù)第 2 步的證書請求文件和第 1 步的服務(wù)器私鑰文件生成證書
          #?x509?根據(jù)現(xiàn)有的證書請求生成自簽名根證書
          #?-days?設(shè)置證書的有效天數(shù)
          #?-in?指定輸入證書請求文件
          openssl?x509?-req?-days?365?-in?server.csr?-signkey?server.key?-out?server.crt


          成功之后會生成如下 3 個文件:

          • key 是服務(wù)器上的私鑰文件。
          • csr 是證書請求簽名文件,用于提交給證書頒發(fā)機(jī)構(gòu) CA。
          • crt 是證書頒發(fā)機(jī)構(gòu) CA 簽名后的證書。

          使用 Node.js 中 HTTPS 模塊開啟一個服務(wù)

          相比傳統(tǒng) HTTP 方式多了一個 options 參數(shù),保證上面生成的自簽名證書和和下面文件是同級目錄。

          //?app.js
          const?https?=?require('https');
          const?fs?=?require('fs');
          const?PORT?=?8443;
          const?options?=?{
          ??key:?fs.readFileSync('./server.key'),
          ??cert:?fs.readFileSync('./server.crt')
          };

          https.createServer(options,?(req,?res)?=>?{
          ??res.writeHead(200);
          ??res.end('Hello?World!');
          }).listen(PORT,?()?=>?console.log(`App?listening?on?port?${PORT}!`));

          經(jīng)測試,使用自簽名證書在 Chrome 版本 85.0.4183.121 中是無法訪問的,以下是在 360 瀏覽器的訪問截圖。

          以下為 Safari 中訪問,雖然有提示但是仍可訪問。

          結(jié)合 Express 框架使用

          經(jīng)過上面兩步的介紹,如果你現(xiàn)在想在 Express 等框架中使用也很簡單,以 Express 為例如下所示:

          const?express?=?require('express');
          const?https?=?require('https');
          const?fs?=?require('fs');
          const?app?=?express();
          const?PORT?=?8443;
          const?options?=?{
          ??key:?fs.readFileSync('./server.key'),
          ??cert:?fs.readFileSync('./server.crt')
          };

          https.createServer(options,?app)
          ??.listen(PORT,?()?=>?console.log(`App?listening?on?port?${PORT}!`));

          app.get('/',?(req,?res)?=>?res.send('Hello?World!'));

          總結(jié)

          搭建一個 HTTPS 服務(wù)其實(shí)不難,Node.js 中為我們提供了 HTTPS 模塊可以很簡單的完成這個工作,如果是在本地測試,我們可以使用 openssl 工具生成一個自簽名證書,除此之外,類似阿里云的一些云服務(wù)廠商也有提供一些免費(fèi)的證書,也可以使用。

          ??愛心三連擊

          1.看到這里了就點(diǎn)個在看支持下吧,你的點(diǎn)贊在看是我創(chuàng)作的動力。

          2.關(guān)注公眾號程序員成長指北,回復(fù)「1」加入高級前端交流群!「在這里有好多 前端?開發(fā)者,會討論?前端 Node 知識,互相學(xué)習(xí)」!

          3.也可添加微信【ikoala520】,一起成長。

          “在看轉(zhuǎn)發(fā)”是最大的支持

          瀏覽 23
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  不卡视频免费在线播放 | 丁香五月婷婷激情四射 | 九色影院| www豆花视频 | 香蕉伊人在线 |