Blog

HSTS – HTTP Strict Transport Security

昨天為了某Server 申請Let’s Encrypt SSL証書,但是一直出現連線HTTP 會自動彈至HTTPS 的問題,不知道是否這個原因,令到Let’s Encrypt 的Certbot 不能進行驗証。

找了很久,確認了没有在Virtual Host 及.htaccess 做HTTPS Redirect,但都找不到原因,最後才(被)發現是因為設定了 HSTS。

向Google 大神查詢,原來是防止駭客騎劫HTTP 的手段,但似乎不是太廣為人用。

主要是在Web Server 中設定特定Header,如

Header always set Strict-Transport-Security “max-age=63072000; includeSubdomains;”

令以往由Web Server 主導的HTTPS Redirect 轉為由Browser主導,強制用戶改用HTTPS,加強網上瀏覽的安全性。

但此安全策略機制也有缺點,如用戶首次存取某網站是不受HSTS保護,而且保護是有時間限制,取決於當前系統時間,如作業系統没有定時更新系統時間,容易被人繞過。

參考:

  1. How to enable HSTS on Apache, NGINX and Lighttpd
  2. 什麼是 HSTS – HTTP Strict Transport Security
  3. HTTP強制安全傳輸技術
  4. 你所不知道的 HSTS

 

Let’s encrypt certbot-auto 更新後出現錯誤

Creating virtual environment...
Installing Python packages...
Installation succeeded.
Traceback (most recent call last):
  File "/opt/eff.org/certbot/venv/bin/letsencrypt", line 7, in <module>
    from certbot.main import main
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/certbot/main.py", line 10, in <module>
    import josepy as jose
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/__init__.py", line 41, in <module>
    from josepy.interfaces import JSONDeSerializable
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/interfaces.py", line 8, in <module>
    from josepy import errors, util
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/util.py", line 4, in <module>
    import OpenSSL
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 12, in <module>
    from OpenSSL._util import (
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 6, in <module>
    from cryptography.hazmat.bindings.openssl.binding import Binding
ImportError: No module named cryptography.hazmat.bindings.openssl.binding

run

ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cryptography
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography-2.0.2.dist-info /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cryptography-2.0.2.dist-info
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cffi /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cffi
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cffi-1.10.0.dist-info /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cffi-1.10.0.dist-info
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/_cffi_backend.so /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/_cffi_backend.so
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/.libs_cffi_backend /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/.libs_cffi_backend
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/zope.interface-4.1.3-py2.7-nspkg.pth /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope.interface-4.1.3-py2.7-nspkg.pth
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/zope.interface-4.1.3-py2.7.egg-info /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope.interface-4.1.3-py2.7.egg-info
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/zope/interface /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope/interface

 

update 2018-11-30


rm -rf /opt/eff.org/*

#It will probably fail on this one but setups a clean virtual enviroment
./certbot-auto --debug

cd /opt/eff.org/certbot/venv/lib64/python2.7

mv site-packages site-packages.sav

ln -s dist-packages/ site-packages

#Your now ready to run certbot-auto again

./certbot-auto --debug

批次修改Git Commit 作者名及電郵

由於工作關係,需要用到Git 工具,但筆者自己的工作平台設定了Git 的用戶電郵為自家電郵。一但需要用自己的工作平台處理公事,一個不小心,就會留下了自家電郵。。然後。。。

如果只是修改最新的Commit 還好,只要用

git commit --amend --author="Author Name <email@address.com>"

修改再Push 就好。但如果已經累積了幾次Commit,就相檔令人苦惱。

向Google 大神查詢了一番,找到了修改多個Commit 的方法,是用 rebase -i 來作修改。

假設 Git Log 有 Commits

A->B->C->D->E (HEAD)

,E 是 HEAD 也就是目前最新的。想要更改 CDE 這三個 Commit 的作者,首先rebase 回到Commit B

git rebase -i B

會出現

pick C
pick D
pick E

把 pick 改為 edit,

edit C
edit D
edit E

儲存關閉後就會進入 rebase 流程,會回到Commit C,修改作者名再運行git rebase --continue至Commit D ,重覆流程至所有Commit 都修改好

git commit --amend --author="Author Name <email@address.com>"
git rebase --continue

如果你有哪個Commit 不需要修改,只要不把Pick 改成Edit 就好,Git Rebase 會自動跳過。

推薦給初學者的PHP Framework – Codeigniter (2) – 如何安裝 Codeigniter

程度:初學者

說到最適合初接觸MVC框架 (Model–view–controller)及開發應用程式框架,不得不提在台灣廣受歡迎的Codeigniter。作為初次接觸MVC,Codeigniter 是一個良好的工具,讓初學者感受到框架的強大。

在我第一次接觸框架這個名詞,頭腦一片空白,究竟是甚麼東東,要如何「安裝」?如何應用?又如何提升我們的開發速度?

Continue reading “推薦給初學者的PHP Framework – Codeigniter (2) – 如何安裝 Codeigniter”

應用程式開發框架初探

程度:初學者

作為剛剛開始接觸編寫語言的新手,你可能已經編寫維護過幾個簡單的網頁。但你有没有開始有以下的煩惱?

  1. 每次開發新功能,都需要重新編寫整個邏輯。
  2. 同一段程式碼,如登入資料庫 (Databse) ,出現在多於一個檔案 (Duplicate Code),使每次維護網站,就算是簡單的修正,都需要修改很多個檔案。
  3. 每次開發新網站,常用的功能如登入,表單驗証 (Form Validation) ,連結至資料庫 (Database) 等,均需要重新編寫 (或從舊網站中複制)。
  4. 當程式規模開始龐大,維護開始變得力不從心,出現錯誤後花費很多時間偵錯 (Debug)。

Continue reading “應用程式開發框架初探”

如何以純CSS處理Div中過多的文字

程度:初學者

建立網頁時時常遇到以方格 (Grid) 形式顯示列表,但每個項目 (Item) 內容不盡相同,長短不一,容易導致方格顯示起來不齊整,故在顯示的時候有時就需要捨棄部份內容了。

但如果直接刪走顯示方格顯示範圍以外的內容,容易混淆使用者,以為內容已經完結,以⋯⋯表示內容尚未完結是個好方法。

曾經見過有其他網頁使用CSS 的 :after 偽元素( Pseudo Element ),都可以做到類似效果,但就難以檢查方格內的內容是否真的滿溢,故最後没有使用有關方法。

後來在 Stack Overflow 找到以純CSS方法做到同樣效果,而且十分出眾。

Continue reading “如何以純CSS處理Div中過多的文字”