[爆卦]無法使用ssl連線是什麼?優點缺點精華區懶人包

雖然這篇無法使用ssl連線鄉民發文沒有被收入到精華區:在無法使用ssl連線這個話題中,我們另外找到其它相關的精選爆讚文章

在 無法使用ssl連線產品中有5篇Facebook貼文,粉絲數超過2,850的網紅矽谷牛的耕田筆記,也在其Facebook貼文中提到, 本篇是一個 Kubernetes 的入門介紹文,探討 Kubernetes 內要如何透過 SSL/TLS 憑證來加強應用程式之間的連線。 本篇文章不使用任何第三方套件,反而是從 Kubernetes 內建的資源功能出發去探討,理解 Kubernetes 的能力與極限其實長久下來對於評估各種專案都滿...

  • 無法使用ssl連線 在 矽谷牛的耕田筆記 Facebook 的最讚貼文

    2021-05-15 08:00:08
    有 67 人按讚

    本篇是一個 Kubernetes 的入門介紹文,探討 Kubernetes 內要如何透過 SSL/TLS 憑證來加強應用程式之間的連線。

    本篇文章不使用任何第三方套件,反而是從 Kubernetes 內建的資源功能出發去探討,理解 Kubernetes 的能力與極限其實長久下來對於評估各種專案都滿有幫助的。

    Kubernetes 的 Secret 除了使用 base64 作為編碼技術外,其實本身也提供不少類型方便管理人員使用,譬如本文提到的 tls 類型, container registry credential 以及最廣泛使用的 generic 等。

    Secret(tls類型)本身創建時會吃兩個參數,分別是 tls.crttls.key,接者這類型的 secret 可以與 ingress 進行整合,將 TLS 給掛載到 Ingress 物件中並且同時執行 TLS Termination,讓 Ingres 與外部連線使用 HTTPS 而內部服務則使用 HTTP 來溝通。

    文章中提到如何透過 openssl 創建一個 self-signed 的憑證,並且針對 self-signed 的特性進行討論,其列出了四個 self-signed 的缺點

    1. 瀏覽器連接到這些 self-signed 憑證的網站時都會露出警告告知使用者,因此這類型的憑證不適合任何正式生產環境使用
    2. 因為 self-signed 就是開發者自行創造,缺少第三方可信任機關的認證,因此惡意攻擊者可以輕鬆換掉服務上的簽證,畢竟瀏覽器本來就覺得簽證有問題,無法分辨到底是先前的自簽憑證還是被替換的憑證。
    3. 第三方CA都會針對發行的憑證給予一些保固與服務,這部分是自簽沒有辦法擁有的
    4. 愈來愈多的使用者會不太願意瀏覽與使用沒有合法且信任憑證的網站

    作者提到 Kubernetes 內部雖然有一個 CA,但是不推薦把任何服務相關的憑證都跟其扯上關係,
    因為該 CA 是給 Kubernetes 內部控制平面使用的,譬如 kubelet, API Server, Controller, Scheduler 等元件彼此溝通中間使用的。

    文章最後作者示範透過 cfssl 的該指令幫一個內部服務創建一個憑證,由於內部服務會透過 Kubernetes Service 提供的 DNS 來存取,因此創建憑證時會於 CN 欄位補上 alternative 的名稱,把 service.svc.... 之類的全部都補上。

    https://medium.com/avmconsulting-blog/how-to-secure-applications-on-kubernetes-ssl-tls-certificates-8f7f5751d788

  • 無法使用ssl連線 在 Kewang 的資訊進化論 Facebook 的最佳貼文

    2021-01-12 09:47:01
    有 44 人按讚

    最近 Funliday-旅遊規劃 常發一些精選旅遊回憶的 App 通知給使用者,在去年十一二月的時候發通知 Server 還能撐的了瞬時大流量的 request。

    但今年開始發這類通知,總共發了三次,三次都造成 Server 被打掛,而且重開 AP 還緩解不了,瞬間手足無措。大概都要等過了十分鐘左右,Server 才將這些 request 消化完。

    這裡就來簡單整理一下時間軸,順便分享一下 Funliday 是如何解決這個問題。

    ---

    * 1/6 1900:系統排程發送精選旅遊回憶的 App 通知
    * 1/6 1900+10s 開始:Server 收到極大量的 request
    * 1/6 1900+20s:Nginx 出現錯誤訊息 1024 worker not enough,並回傳 http status code 503
    * 1/6 1900+25s:PostgreSQL 出現錯誤訊息 could not fork new process for connection (cannot allocate memory)
    * 1/6 1900+38s:Node.js 收到 PostgreSQL 的 exception。There was an error establishing an SSL connection error
    * 1/6 1900+69s:PostgreSQL 出現錯誤訊息 database system is shut down
    * 1/6 1900+546s:PostgreSQL 出現錯誤訊息 the database system is starting up

    ---

    看了時間軸就覺得奇怪,先不論 10s 的時候發了極大量 request,造成 20s 在 Nginx 出現 worker not enough 的錯誤訊息。而是要關注 25s 時的 PostgreSQL 出現 could not fork new process for connection 的錯誤訊息。

    Funliday 用了同時可承載 n 個 connection 的資料庫,而且程式碼又有加上 connection pool,理論上根本不該出現這個錯誤訊息。但整個時間軸看下來感覺就是 PostgreSQL 的 capacity 問題,造成系統無法運作。

    因為就算將 Nginx 的 worker connection size 再加大 10 倍,只是造成 PostgreSQL 要接受的 request 也跟著被加大 10 倍,但 PostgreSQL 那裡因為 request 變多,原本在 69s 直接關機的時間點只會提早,而無法真正緩解這個狀況。

    基於以上狀況,小編就開始回去看自己的程式碼是不是哪裡寫錯了。會這樣想也是覺得 PostgreSQL 應該沒這麼弱,一下就被打掛,一定是自己程式碼的問題 Orz

    ---

    這邊來分享一下自己程式碼的寫法,圖一是原始寫法,在每個 API 都 create 一個 db client instance 來處理該 API 層的所有 db request。這是蠻單純的做法,也是 day 1 開始的處理方式。但有個小問題,就是每個 API 層都要自己 create instance,不好管理,且浪費資源。

    後來因為想要做 graceful shutdown 的關係,所以調整了一下 db client instance 的建立方式,用 inject 將 instance 綁在 request 上面,如圖二。這樣只要在 middleware 建立 db client instance 就好,好管理,而且只要有 req 就可以取得 instance,非常方便。而這也是 1/6 時的程式碼,就從這裡開始研究吧。

    ---

    直接切入 node-postgres 的文件,認真讀了一下 pool 有下面兩種使用方式:

    1. pool.connect, pool.release:文件寫著 checkout, use, and return,光看描述就應該用這個沒錯。
    2. pool.query:適用於不需要 pool 的連線方式,文件上也清楚寫著內部實作是直接 call client.query,所以用了這個方式是完全跟 pool 扯不上邊。

    但偏偏小編從 day 1 用的就是第 2 種方式 Orz,雖然看起來應該是寫錯,但也是要修改後實測,才知道是不是真的可以解決問題。

    ---

    如圖三,這是修改後的程式碼。想了一下子,覺得目前在 API 層使用 req.pool.query 還不錯,不想用官方的建議做法:先 create client,然後 query 之後,再使用 release。

    如果照官方建議做法,API 層的程式碼會多一堆與商業邏輯無關的程式碼,也不好維護。所以在不想動到 API 層的程式碼,只能使用 monkey patch 的方式來達到這個需求。

    monkey patch 可以將原方法利用類似 override 的方式,將整個方法改掉,而不改變 caller 的程式碼,這也是 JavaScript, Ruby, Python 這類動態語言的特性之一,但真的要慎用,一不小心就會把原方法改成完全不同意義的方法了。

    所以原本應該要在 API 層實作 connect, query, release 一大堆程式碼,可以用 monkey patch 完美解決這一大堆程式碼。

    ---

    在 dev 壓測後至少 capacity 可以達到原本的 4 倍以上,隔天實際上 production 之後也確實如壓測般的數據,可以承載目前的流量。

    其實這篇分享的重點只有一點,文件看仔細才是最重要的事啦!如果沒把文件看仔細,然後開發經驗也不足的話,什麼 RCA、monkey patch 都幫不上忙啦!

    ---

    後記:有夠丟臉,其實完全用不到圖三,只要把圖二的 pool creation 放到最外層就好了,因為 pool.query 的內部實作已經有做 connect, query, release 了。

    感謝下面的 Mark T. W. Lin 及 Rui An Huang 的幫忙,實在是太搞笑了 Orz

    * Pool 的文件:https://node-postgres.com/features/pooling
    * 官方建議寫法:https://node-postgres.com/guides/project-structure
    * pool.query 的內部實作:https://github.com/brianc/node-postgres/blob/master/packages/pg-pool/index.js#L332

    #expressjs #nodejs #javascript #postgresql

  • 無法使用ssl連線 在 哪裡好吃哪裡去:神秘的水原誠 Facebook 的最讚貼文

    2020-04-08 03:20:35
    有 1 人按讚

    這兩天遇到一個狀況 因為連線需求提高的緣故, 所以需要加開機器分擔連線需求 需要把外部網站的網址(Domain)連線資料, 導向到內部網站的指定port並帶入SSL憑證 憑著已經做過很多次的經驗 建立GCP主機, 設定防火牆, 再到Windows Server裝上IIS後再設定SSL憑證與網站綁定 接下來安裝URL rewrite模組, 之後調整rewrite設定應該就可以完成... 誰知道這次過程並不順利 Orz 反覆確認過所有的設定環節 web.config設定檔也確實有生效 外部也能夠連線... 然而卻還是無法正常使用rewrite功能 正當已經懷疑很多次人生的時候 才發現原來IIS安裝的模組少了一個Application Request Routing...( 奇怪了= = 之前裝就不會這樣, 該不會GCP的Windows Server 2016有什麼變動吧? 看起來這模組確實是需要與URL rewrite搭配使用就是 不過這次為什麼沒有一起裝上去就很怪了... 不過也不是裝完就沒事了 還要記得到Server Proxy Setting設定裡頭把Enable Proxy這選項打開 不然URL Rewrite也不會正常 唉= = 就是這樣, 浪費不少時間 記錄下來, 希望以後不要再碰到了
    https://mshw.info/mshw/?p=22776