亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

Node urllib庫遇到ERR_TLS -CERT_ALTNAME_INVALID解決方法

2024-06-18 09:32:16
45
0

在本地開發中使用Node.js [urllib]庫聯調測試環境https接口時,出現 [ERR_TLS -CERT_ALTNAME_INVALID]: Hostname/Ip does not match certificate's altnames報錯,即服務器主機和證書不匹配,而同事用Golang卻能正常請求,經過一番折騰終于找到原因并解決,記錄一下填坑筆記。

Node.js從0.9.2版本開始就默認驗證證書,而請求的測試環境https證書并不是從權威機構頒發的,而Go、Java等其它語言能正常請求是因為沒有默認校驗證書,所以會出現這種報錯,于是解決問題就有兩種方式1、測試環境更新證書;2、node請求不默認校驗證書。方法一不大可行,公司不可能為了適配Node端更換證書,此時就只有方法二可行了,網上得到的解決辦法是在請求時加上{rejectUnauthorized:false}選項不再校驗證書的安全性,但這具有 嚴重的安全隱患。發送給對等方的任何內容仍將被加密,但發起中間人攻擊變得更加容易,即數據將被加密給對等方,但對等方本身可能并不是認為的服務器!因為是在測試環境聯調就采用此種方式,?生產必須要校驗證書安全性的?。

于是滿懷希望的準備采用方式二解決問題,但是[urllib]官方文檔并沒有給出初始化請求的選項,自己給options里面強制加了 {rejectUnauthorized:false} 并沒有生效,希望破滅,陷入沉思。urllib這種week下載量幾十萬的庫,連node這種基本的配置不可能不支持,肯定是作者為了安全因素隱藏了,只暴露出一個簡單的 request 方法,這個方法又是如何初始化的呢,順藤摸瓜進入node_modules下對應的目錄,并找到了初始化方法和可支持的現象,自己加個選項就能解決問題,具體代碼如下:

let client = null
function initClient(secure = true) {
  if (client) return client
  client = new HttpClient({
    connect: {
      rejectUnauthorized: secure
    }
  })
  return client
}
exports.initClient = initClient
0條評論
0 / 1000
譚****成
1文章數
0粉絲數
譚****成
1 文章 | 0 粉絲
譚****成
1文章數
0粉絲數
譚****成
1 文章 | 0 粉絲
原創

Node urllib庫遇到ERR_TLS -CERT_ALTNAME_INVALID解決方法

2024-06-18 09:32:16
45
0

在本地開發中使用Node.js [urllib]庫聯調測試環境https接口時,出現 [ERR_TLS -CERT_ALTNAME_INVALID]: Hostname/Ip does not match certificate's altnames報錯,即服務器主機和證書不匹配,而同事用Golang卻能正常請求,經過一番折騰終于找到原因并解決,記錄一下填坑筆記。

Node.js從0.9.2版本開始就默認驗證證書,而請求的測試環境https證書并不是從權威機構頒發的,而Go、Java等其它語言能正常請求是因為沒有默認校驗證書,所以會出現這種報錯,于是解決問題就有兩種方式1、測試環境更新證書;2、node請求不默認校驗證書。方法一不大可行,公司不可能為了適配Node端更換證書,此時就只有方法二可行了,網上得到的解決辦法是在請求時加上{rejectUnauthorized:false}選項不再校驗證書的安全性,但這具有 嚴重的安全隱患。發送給對等方的任何內容仍將被加密,但發起中間人攻擊變得更加容易,即數據將被加密給對等方,但對等方本身可能并不是認為的服務器!因為是在測試環境聯調就采用此種方式,?生產必須要校驗證書安全性的?。

于是滿懷希望的準備采用方式二解決問題,但是[urllib]官方文檔并沒有給出初始化請求的選項,自己給options里面強制加了 {rejectUnauthorized:false} 并沒有生效,希望破滅,陷入沉思。urllib這種week下載量幾十萬的庫,連node這種基本的配置不可能不支持,肯定是作者為了安全因素隱藏了,只暴露出一個簡單的 request 方法,這個方法又是如何初始化的呢,順藤摸瓜進入node_modules下對應的目錄,并找到了初始化方法和可支持的現象,自己加個選項就能解決問題,具體代碼如下:

let client = null
function initClient(secure = true) {
  if (client) return client
  client = new HttpClient({
    connect: {
      rejectUnauthorized: secure
    }
  })
  return client
}
exports.initClient = initClient
文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0