g0v-shadow

Month: 2018-09

2018-09-04

mingtsay 20:01:32
@poga 目前已知會有多少層?如果用 whitelist 方式呢?
ttcat (not_staff) 20:36:17
「原本是 https 的網址,改成 g0v 後還是 https,就連不上沒有 https 憑證的對應的 shadow 網址了」這個我有點看不懂
ttcat (not_staff) 20:37:09
@mingtsay 主要是希望盡量不要走 whitelist 的方式,因為政府會一直有新網站,另外就是希望簡化別的國家的 implement 程序
mingtsay 20:37:18
因為要 https 一定要憑證,而我們不知道會有什麼網址這樣。
mingtsay 20:38:55
例如今天政府弄了 http://example.gov.tw|example.gov.tw 然後明天弄了 http://2018.example.gov.tw|2018.example.gov.tw 之類的,那我們頂多能用 wildcard 做到給 http://example.g0v.tw|example.g0v.tw (由 *.http://g0v.tw|g0v.tw 提供),可是對於 http://2018.example.g0v.tw|2018.example.g0v.tw 就必須另外跑驗證程序了。
ttcat (not_staff) 20:39:32
對,但是我想的是,當 http://aaa.bbb.ccc.gov.tw|aaa.bbb.ccc.gov.tw 改成 http://aaa.bbb.ccc.g0v.tw|aaa.bbb.ccc.g0v.tw 的時
1. 檢查是否有 http://aaa.bbb.ccc.g0v.tw|aaa.bbb.ccc.g0v.tw 的 https 憑證
2. 若無,自動向 let’s encrypt 申請,並 redirect 到 http://shadow.g0v.tw/aaa.bbb.ccc.gov.tw|shadow.g0v.tw/aaa.bbb.ccc.gov.tw
3. 若有,導向 https 網址
mingtsay 20:39:32
我是有想過如果透過 certbot 在使用者第一次瀏覽的時候來跑 DV 會不會能解決這問題?
mingtsay 20:39:51
哦哦所以 ttcat 跟我想到同一個可的解法?
ttcat (not_staff) 20:40:08
最後一次跟 poga 討論是提了這個方案
ttcat (not_staff) 20:40:26
所以他在上面回「原本是 https 的網址,改成 g0v 後還是 https,就連不上沒有 https 憑證的對應的 shadow 網址了」
ttcat (not_staff) 20:40:33
我不太清楚什麼意思前陣子太忙沒追
mingtsay 20:40:44
沒憑證就先導向我們的 shadow portal 然後同時看要不要人工產或是自動產該 domain 的憑證?
ttcat (not_staff) 20:40:51
ttcat (not_staff) 20:41:14
然後下次有人連線到 http://shadow.g0v.tw/aaa.bbb.ccc.gov.tw|shadow.g0v.tw/aaa.bbb.ccc.gov.tw 的時候,也會先檢查憑證有沒有申請過了
ttcat (not_staff) 20:41:22
如果有,就把 http://shadow.g0v.tw/aaa.bbb.ccc.gov.tw|shadow.g0v.tw/aaa.bbb.ccc.gov.tw redirect 回去
tkirby 20:42:20
第一次 hit 也許可以導向一個暫存頁 等 ajax polling 收到通知自動重導向到 https 版本,這樣就可以無縫接軌?
ttcat (not_staff) 20:43:09
但暫存頁如何產生?
tkirby 21:06:19
頁面就靜態, nginx 設定在 reverse proxy miss 時連過去? polling 時直接看 URL 就知道要檢查哪個東西
ttcat (not_staff) 21:06:30
++
mingtsay 21:06:37
++
poga 21:42:02
我那句話的意思是,當使用者把 https://aaa.gov.tw 改成 http://aaa.g0v.tw|aaa.g0v.tw 時,瀏覽器會保留使用的 protocol,所以會連往 https://aaa.g0v.tw。 這時候沒有憑證的話,chrome 就會直接顯示 protocol error 了
ttcat (not_staff) 21:56:26
所以沒辦法設定一個判斷,如果沒有憑證,就 redirect?
poga 21:58:05
瀏覽器會在傳送任何資料前先檢查憑證,憑證錯誤就不會傳資料了,所以沒辦法由 server 判斷後 redirect
ttcat (not_staff) 22:01:52
okay 那我懂了
poga 21:44:15
第一次瀏覽的時候就自動申請是可行的,不過 let's encrypt 有 rate limit(每週每個 domain 50 個)
poga 21:49:35
所以也只有自動申請憑證這條路可走。可以接受次數限制的話之前已經有 prototype 了,需要的話我再找時間把他開起來
ttcat (not_staff) 22:14:17
可是我不懂誒,如果第一次瀏覽,沒有 https 不就會直接出現 protocol error
ttcat (not_staff) 22:14:26
怎麼觸發程式去自動申請
mingtsay 22:14:40
certbot 吧或是 acme.sh
ttcat (not_staff) 22:15:10
hmm
ttcat (not_staff) 22:15:25
那 redirect 能不能寫在這種 script 最後面
poga 22:23:06
流程是
1. 瀏覽器問 server 「你有沒有 http://aaa.g0v.tw|aaa.g0v.tw 的憑證」
2. server 發現自己沒有憑證,呼叫 certbot 去跟 let's encrypt 申請憑證
3. certbot 拿到憑證後,server 把這份剛拿到的憑證傳回去給瀏覽器說「我有憑證喔」
4. 瀏覽器確認憑證正確後,才開始傳資料
poga 22:24:19
所以,如果 certbot 有拿到憑證,那就能直接走 https 了,不需要 redirect。
poga 22:24:38
如果因為次數限制拿不到憑證,那瀏覽器就中斷連線了,沒機會 redirect

2018-09-28