文明的野蠻人

之前一直很吶悶為何一個台大法律系的學生怎麼會去讀哈佛憲法博士,你要知道,這種學位是不能考律師的,就只能往學術研究而已,以我理解除非真的對法律很有興趣,不然幹嘛自我閹割。

更搞不清楚的是,一個哈佛法學博士學成歸來之後,竟然是幹”翻譯”的工作。這不是大材小用嘛?現在我清楚了,這些學歷只是裝飾用的,因為他認為他自己身上流的是貴族的血統。

今天看了馬英九的中外記者會文稿,真是失格。首先,以我的認知,民主是一個相對值,不是一個絕對值,只有越來越民主,哪有這種故步自封的民主。他那種講法很像之前國小作文裡面提到的,我們要緬懷蔣公德政,這一切得之不易,所以我們要…去x媽的德政!現在還會有這種愚民想法的,我估計全世界只有金三胖而已。

服貿是好是壞我不是專家,但人民目前害怕的是這協議會有怎樣的衝擊。人之所以怕鬼,不是鬼有多厲害,是人不知道鬼到底是什麼東西。所以政府有什麼配套,有政策就把它給列表出來,而不是一再說這個東西有多好。他這種說法比起沒經驗的保險業務員更糟糕。

假設你碰到一個拉保險的人每天跟你說,你看這份保單有多好,隔壁的張大媽,李二嬸都買了。前幾天,隔幾條街的陳大伯因意外不幸走了,他兒子陳阿狗還多領了好幾百萬呢,他們都買了,奇怪你怎麼不買?

保險這玩意大家都清楚,但他這種賣保險方式,有人會跟你買,我只能說給妳22K薪水還嫌太多!難怪他的薪水都存起來!

如果服貿如果真的有真這麼好,那我要你政府幹什麼?簽完不就天下太平了,我看也不要什麼行政院,經濟部了,對吧?所以你講這句話之前,要想清楚如果真的簽了之後,台灣經濟還拉不上來,那你馬英九還有什麼招數?你就靠一個服貿打通關嘛?

好,退一萬步說,如果真的服貿那麼好,那你為何不叫你底下的人多多宣導,讓人民多了解。你要知道,就算台灣突然挖到石油黃金,宣布每個人立刻發10萬新台幣消費卷,你相不相信這種好康的事還是會有人反對。更何況牽扯到60%人民的未來和利益的事情,你和你的團隊到底做了什麼?

醒醒吧,現在沒有貴族了,至少台灣沒有!文明的野蠻人!

如何取消 CubieTruck Root 自動登入 TTYS0

每次看到機器總是有兩個 root 在線上,雖然知道是 serial port 開機時自動載入的,為了便於使用者一開始編輯東西用的。但是現在系統已經運行一段時間了,我想這兩個 sessions 也不需要了,這樣也不會看到有兩個 root 登入突然嚇一跳。

因為有兩個不同登入方式,所以我們要改兩個檔案

先到 /etc/init 目錄底下,把 /etc/init/openvt.conf 改成 /etc/init/openvt.conf.bak

mv /etc/init/openvt.conf /etc/init/openvt.conf.bak

然後到 /etc/default 目錄編輯 /etc/default/autogetty 把 ENABLED 那行改成 0,存檔。

所有的設定必須重新開機才能生效。

後記:這個方法要小心,之後機器網路不通時,怎麼連進去都不知道,切記切記。

CubieTruck Mysql 使用者權限檢查與管理

之前寫程式用了很多 mysql 的資料庫,但是對Mysql 使用者這塊領域不是很清楚。尤其在建立這台 CubieTruck 伺服器時,不小心誤建立了很多錯誤的使用者以及賦予錯誤的權限,所以我想好好整理一下。

首先在命令列中登入 mysql 後台

mysql -u root -p

然後輸入 root 密碼之後,想要看到使用者的話就輸入

mysql> select user,host from mysql.user;

這樣就可以顯示出 CubieTruck 所有目前 mysql 裡面的使用者與箱對應的主機名稱,這個表格分為 user 和 host 兩個欄位,尤其 host 欄位是 % 代表所有的,這很有可能是錯誤的,所以刪除的指令就是

mysql> delete from mysql.user where user='使用者名稱' and host='主機名稱';

建立使用者的話要比較小心,因為使用者欄位最多只能 16 個字元,所以必須用單引號(’)區隔使用者和主機名稱。

mysql > create user '使用者名稱'@'主機名稱' identified by '密碼';

注意,在某些版本中,'使用者名稱'@'主機名稱'和'使用者名稱@主機名稱'是不一樣的,要讓這個使用者有某個資料庫的使用權,

mysql > grant all on 資料庫名稱.* to '使用者名稱'@'主機名稱';

檢查某個使用者目前的權限

mysql > show grants for '使用者名稱'@'主機名稱';

更改某個使用者的密碼

mysql> set password '使用者名稱'@'主機名稱' = password('密碼');

最後要寫入資料庫,讓權限設定生效

mysql> flush privileges;
mysql> quit

顯示目前 mysql 所有資料庫

mysql> show databases;

刪除某個不用的資料庫

mysql > drop databases 資料庫名稱;

使用某個資料庫以備後續查詢

mysql > use 資料庫名稱;

使用某個資料庫之後查詢整個表格

mysql > show tables;

在Mysql 建立某個資料庫

mysql > create database 表格名稱;

對了,mysql 語法中命令大小寫是沒有區分的,也就是大小寫沒有差別的。而且大部分的命令是以 ‘;‘結尾的。

CubieTruck 掛載 Samba 發生CIFS VFS: default security mechanism requested 訊息

不知道是不是最近升級 Ubuntu 13.10 時才發生的,反正最近一直在看 log,像是 /var/log/syslog,/var/log/kern.log,/var/log/apache2/error.log,記錄裡面多出一行

CIFS VFS: default security mechanism requested. The default security mechanism will be upgraded from ntlm to ntlmv2 in kernel release 3.3

大約是在講 CubieTruck 用 CIFS 掛載 Windows 網路芳鄰 Samba 資料夾有一些設定不太符合系統期望,但是我還是可以掛載成功。但是總覺得是要知道原因,所以我找了一下當初掛載 Windows 網路芳鄰 Samba 資料夾的命令

mount -t cifs -o file_mode=0777,dir_mode=0777,uid=1000,gid=1000,username='accountName',password='password' //192.168.1.xxx/FolderName /mnt/smb

上面的accountNamepassword代表登入遠端Windows 網路芳鄰帳號密碼,以及路徑 //192.168.1.xxx/FolderName 都因人而異。我在猜想會發生這個訊息是否因為我們把帳號密碼用明碼方式寫出來,可能會導致不安全的問題(別人可以讀取像是 /etc/fstab檔案內容)。所以我們必須做一些修正。

首先在自己家目錄,應該就是 /root 目錄底下創建一個檔案,檔名可以自己取,我自己把它命名為 .credentials,記住屬性必須是 0600,只有自己可以讀寫,這樣別人才看不到啊!

-rw------- 1 root root 100 Jan 1 00:00 .credentials

然後再用編輯器編輯 .credentials 檔案填入下面訊息,

username=accountName
password=password
domain=WORKGROUP

其中,accountNamepassword是你遠端 Windows 網路芳鄰 Samba 資料夾可以登入(最好有可以寫入權限)的帳號和密碼,路徑是 //192.168.1.xxx/FolderName,然後把掛載命令改為

mount -t cifs //192.168.1.xxx/FolderName /mnt/smb -o file_mode=0777,dir_mode=0777,uid=1000,gid=1000,credentials=/root/.credentials

然後看看 log ,是不是 CIFS VFS: default security mechanism requested. The default security mechanism will be upgraded from ntlm to ntlmv2 in kernel release 3.3 警告訊息消失了呢?

tail /var/log/kern.log

CubieTruck 升級到 Ubuntu 13.10

好吧,我承認我就是那種沒事找事做的人,所以我就把 CubieTruck 從 12.04 升級到 13.10。其實機器升級時,我心裡是很掙扎的,萬一…算了,沒有萬一,反正這台小玩具就是拿來玩的,總得有人先嘗鮮吧!

首先我們先確認 CubieTruck 目前的版本,輸入下面的指令

lsb_release -a

輸出結果會告訴你目前 Ubuntu 的版本,這個指令要記住,因為之後還要用它確認 CubieTruck 是否升級完畢。好,我先說結果吧,經過一番苦戰,我是升級成功了,CubieTruck 重新開機之後也沒有問題,還沒有服務不正常的,就看這幾天有沒有其他問題發生。反正就是兵來將擋,水來土掩。只要機器不死,總有方法的!

升級的指令是  do-release-upgrade,但是預設值應該無法順利執行,因為必須先裝一個套件 python-apt

apt-get install python-apt

安裝完之後還有一個問題,就是 CubieTruck 暫存目錄 /tmp 的大小只有 20M,這太小了,後面執行中會告訴你可能需要到 50-60MB,看你安裝的套件多寡,所以我就先找一個硬碟比較大的目錄把它給 bind 一起,這樣就沒有暫存空間不足的錯誤訊息。

mount --bind /tmp /mnt/data/tmp

這個 /mnt/data/tmp 是你自己要連結的新目錄,大小多少不清楚,反正我的空間是還有200GB以上就是了。然後才輸入升級的指令。

do-release-upgrade

首先,他會告訴你目前是透過 SSH 連線升級的,這並不被建議,但我…還得去找 USB TTL,算了,跟他拼了,所以還是用 SSH 升級,但是如果有 console 可能會比較好吧?不過他好像會開一個備用的 port 給你,萬一掛的話。關於這一點,我是滿懷疑的。Parent process掛了,child肯定死的,那升級的程序呢?

接下來就是漫長的等待了,裡面會有幾次要你確認一些設定,大部分都是 php.ini/apache2.conf之類的,我都選擇保留原先的設定(輸入N或是直接 Enter 鍵),可能我裝的套件還滿多的,所以整個流程大約是 30 分鐘。這個時間大家應該都不一定。

安裝過程中,整個系統的負載可能在 2-4左右(/proc/loadavg),所以有設 watchdog 的人要注意一下了,別裝了一半,就被 watchdog 給重新開機了。

升級完畢,可以輸入下列指令看看目前 Ubuntu 版本,

#lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 13.10
Release: 13.10
Codename: saucy
沒錯就是 Ubuntu 13.10 Saucy,再來就是重新開機看看有沒有問題,其實我是要看 log 檔案報什麼錯誤。
/var/log/kern.log
/var/log/syslog.log
/var/log/apache2/error.log
...

目前我是發現一開機完 apache2 無法執行,原因是 /etc/apache2/apache2.conf 檔案裡面

LockFile ${APACHE_LOCK_DIR}/accept.lock

改成

Mutex file:${APACHE_LOCK_DIR} default

但是還有一些問題沒有找到解決方法,但是 apache2 是可以正常運作的。

/var/log/apache2/error.log 會報的錯誤

AH00094: Command line: '/usr/sbin/apache2'

這個沒找到解決方法,但似乎不影響 apache2 運作,其他的之後再找找吧!

對了,重新開機完之後不要忘了,執行

apt-get clean
apt-get update
apt-get upgrade

CubieTruck MySQL 分析優化時出現 Table is already up to date

之前有一篇文章是講到如何用 mysqlcheck 來分析,檢查,優化你的 mysql 資料庫。我們來複習一下。

你想要分析所有的資料庫,那就下

mysqlcheck -a --all-databases -u root -p

如果要檢查所有的資料庫

mysqlcheck -c --all-databases -u root -p

如果要最佳化所有的資料庫,

mysqlcheck -o --all-databases -u root -p

但是今天我在優化的過程中出現一個以前不曾看過的訊息

mysql.columns_priv Table is already up to date
mysql.db Table is already up to date
mysql.event Table is already up to date
mysql.func Table is already up to date

看到Table is already up to date不必緊張,它只是告訴你,你的Table已經是最新的了,不需要再分析,檢查和優化了。

如何在 CubieTruck 上的 SSH 使用 Putty 免密碼登入

自從架了這台 CubieTruck 伺服器之後,每天不下一百次有人想要登入 SSH,目的做什麼我不知道。所以一開始我就在 /etc/hosts.allow 和  /etc/hosts.deny 上設定了我常用的 IP 位址,讓其他的人無法登入。這可以防止大部分的人攻擊,因為我預設的規則就是 Deny ,除了一兩個我知道的位址可以登入而已。但這有一個問題,如果我要從其他地方也能登入呢?這個位址可能是浮動的呢?這個方法就行不通了。

所以問題又回到 SSH,SSH不同於 Telnet, 是一個 Securtiy  的連線,是可以允許有金鑰的,只是大部分的人都疏忽了,只用帳號密碼登入。所以我決定採用金鑰的方式登入,避免一些閒雜人等登入,又可以免去登入時輸入帳號密碼,我只要確保我的鑰匙不被偷走就可以了。

首先,我們在 CubieTruck 上登入之後想要允許登入的帳號(不是 root 的喔,我的 CubieTruck 預設 root 是不可以由 SSH 登入的),在自己的家目錄或是打入

cd ~

這樣就可以回到自己的家目錄了,然後輸入下面指令就可以得到兩個檔案,一個是公鑰,一個是私鑰。

ssh-keygen -t rsa

一直按確定就可以了。之後在自己加目錄 ~/.ssh/ 裡面會多兩個檔案,id_rsaid_rsa.pub。這兩個檔案要保管好。注意 .ssh 目錄的權限必須是 0700,只有自己可以讀取。id_rsa權限必須是 0600,而 id_rsa.key必須是 0644,你用 ls 看起必須像是

drwx------ 2 yourname yourname 4096 Mar 12 14:48 .ssh
-rw------- 1 yourname yourname 1679 Mar 12 14:38 id_rsa
-rw-r--r-- 1 yourname yourname 400 Mar 12 14:38 id_rsa.pub

如果權限不對,請用 chown 更改它的權限。之後在你的帳號  ~/etc/.ssh 目錄底下,把 id_rsa.pub 檔案複製另外一個檔案,檔名是 authorized_keys,注意,權限也要對。

cp -a ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
-rw-r--r-- 1 yourname yourname 400 Mar 12 14:48 authorized_keys

然後把這兩個 id_rsa 和 id_rsa.pub 檔案,不管是用 FTP/SAMBA/SCP/SDCARD/USB 任何方式,把它拷貝到你電腦的 Putty 目錄底下。之後把 id_rsa 改名成 id_rsa.ppk 名稱。之後再去下載 PuTTYgen.exe 檔案,拷貝回到電腦上的 Putty 的目錄。下載完畢之後,直接執行 PuTTYgen.exe,畫面如下:

ssh1

請選擇 SSH-1(RSA)型態,然後按下 “Load” 載入你剛剛上傳到電腦的私鑰,也就是你剛剛改名字的 id_rsa.ppk,畫面如下

ssh2

其實上面已經告訴你之後要儲存私鑰了(Save private key) ,閱讀完畢之後,按下”確定”。

ssh3

然後按下 “Save private key”,你可以選擇自己想要的檔名,例如 id_pirvate.ppk。這個檔名要記住,因為之後 Putty 設定要使用到。到這裡 PuTTYgen.exe 就已經功成身退了。改設定 Putty 的設定檔。先執行 Putty.exe吧,

ssh4

假定你之前已經有一個以上的 “Saved Session”,這個是紀錄你的 ip 位址的一個設定檔且可以連線到剛剛設定的 CubieTruck 主機,我們要針對這個設定檔作一些修正。按下 “Load” 載入某個設定檔,這個設定檔是連結到你的 CubieTruck 的伺服器。載入完畢之後,先按下左方 “Connection”->”Data” 頁面,然後輸入你之前在 CubieTruck 要登入的帳號名稱(因人而異)。這個帳號就是你剛剛製造金鑰的帳號。

ssh5

之後,在頁面左方點選 SSH選項讓他展開來,再次點選 Auth,勾選 Attempt authentication using PageantAttempt TIS or CryptoCard auth (SSH-1),其他的不要勾選。之後按下 “Browse”按鍵,選取你剛剛儲存的私鑰,上述的例子是 id_pirvate.ppk,不要選錯了。

ssh6

選取好了之後,按下左上方 Session 選項回到主畫面,不要忘了 “Save”存檔紀錄,不然你每次就得重做上述步驟。

ssh7

之後,你就可以 “Load” 你剛剛儲存的 “Save Sessions”了,你可以發現到登入到 CubieTruck 的帳號不必輸入帳號密碼了。但這還不夠,因為別人可以不透過金鑰,採用最原始的帳號密碼方式登入,所以要回到 CubieTruck 上做些設定了。

登入之後,假定你已經轉換成 root 帳號了,到 /etc/ssh 目錄底下編輯 sshd_config (注意,不是 ssh_config ,少一個d),然後修改這兩行

PubkeyAuthentication yes
PasswordAuthentication no

修改完之後,存檔,重啟 ssh 服務。

service ssh restart

你可以試試看,不用剛剛 Putty 的 “Save Sessions”連線時,是不是輸入帳號時就拒絕連線了呢?

後記:妥善保管這些鑰匙檔案,可以拷貝到其他電腦上的 Putty 目錄使用,然後重新設定 “Save Sessions”的設定檔就可以了。

限制 CubieTruck 上的 WordPress 管理者以 HTTPS SSL 登入

上一篇文章我們提到了可以限制某些資料夾必須採用 HTTPS 加密協定登入,這一篇我們談談 WordPress 部落格如何限制管理者登入必須採用 HTTPS SSL 加密協定,因為管理者必須輸入密碼登入。之所以不採用上一篇的方法原因是,WordPress 是一個部落格,大部分時間都是別人訪問,沒有登入顯示密碼的問題,犯不著規定每個人都必須採用 HTTPS SSL 加密協定,而且加密解密也是需要效能的。所以我們只限制管理者登入時,才採用 HTTPS SSL 加密協定。

這一部分,WordPress 套件已經幫我們想好了,所以直接修改 /var/www/wordpress/wp-config.php (路徑可能依需求而不同)這個檔案。文件是說先找到 /* That’s all, stop editing! Happy blogging. */ 這一行,然後在這一行上面添加後面兩行,但是我的 wp-config.php 是繁體版的,找不到這一行,所以我就在前面添加下面兩行敘述。我試過加在檔案後面不起作用,必須增加到最開頭的地方。

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

改完之後不需要重啟 apache 服務,直接使用就可以了,你可以發現瀏覽器左上角的位址欄已經由 HTTP 協議自動改為 HTTPS SSL加密協定了。

另外一提的是,因為可能不是所有的元件都會採用 HTTPS SSL加密協定,例如,某一張圖片是寫死用 HTTP 協議,所以在 IE 瀏覽器上可能會出現一些警告訊息,提醒你不是全部元件都是 HTTPS SSL加密的,而 Chrome 會在左上角出現一個黃色三角形提醒你,只有全部是綠色的才代表這一整個網頁都是走 HTTPS SSL 加密協議。

在 CubieTruck 如何限制某些目錄採用 HTTPS 加密協議

上一篇我們講到了如何透過 StartSSL 取得憑證,然後採用這些憑證架設 Apache HTTPS 加密協議伺服器,我希望大家都可以很順利的架設起來,並且正常運作。這一篇我們講講如何限制某些敏感的目錄強制走 HTTPS加密協議,而不是一般的 HTTP協議,以避免您的密碼被有心人士竊聽。

假定你要保護的目錄是 /var/www/example(通常這些目錄都需要帳號密碼登入,例如 owncloud等等),事實上在 /var/www目錄底下每一個子目錄應該都有一個服務或是 Plugin來響應,所以這裡 /var/www/example 只是一個範例。

CubieTruck 的Apache2 的預設設定檔都在 /etc/apache2/sites-enabled 目錄底下,編輯這個檔案 /etc/apache2/sites-enables/000-default 檔案。這裡提供兩個做法,第一個是根本不要 HTTP協議,所有訪問這個目錄的 HTTP 協議連線一律拒絕。第二種是如果客戶使用 HTTP 協議訪問這個目錄,Apache2會自動轉成 HTTPS 加密協議。

在 000-default 檔案裡面,你應該有兩個以上的 <VirtualHost: xx>…</VirtualHost>的設定,一組給 80 HTTP協議,另一組是給 443 HTTPS加密協議。第一種方法比較簡單,就直接在 <VirtualHost: 80> … </VirtualHost> (給HTTP 80協議)找個位置插入下面敘述

<Directory /var/www/example>
deny from all
</Directory>

然後重啟 apache2 服務就可以了,之後如果你採用 HTTP 協議訪問都會被拒絕,只有 HTTPS加密協議才可以,因為我們沒有設定 Deny規則。

service apache2 restart

第二種把HTTP協議導到HTTPS加密協議方式,也是編輯apache2的設定檔 /etc/apache2/sites-enabled/000-default ,這個檔案裡面應該有 <VirtualHost: 80> … </VirtualHost> 這個段落,找個位置插入下面敘述

<Directory /var/www/example>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>

另外一種寫法

<Directory /var/www/example>
RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$ [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>

然後重啟 apache2 服務就可以了,這樣原本採用 HTTP 協議訪問都會被改用 HTTPS 加密協議,注意一下瀏覽器的左上方網址是不是從HTTP協議改成 HTTPS 加密協議了呢?

service apache2 restart

後記:WordPress 部落格不是採用這個方式,也不需要強迫所有閱讀者都用HTTPS加密協議,因為他們沒有登入的問題,也就沒有密碼外洩問題。但下一章我們會講講如何讓 WordPress 登入管理或撰寫文章時採用 HTTPS 加密協議。

還有 owncloud 也不需要,owncloud 可以在自己網頁裡面設定  forcessl 的選項。

如何採用 StartSSL 在 CubieTruck 架設 HTTPS 伺服器

上一篇文章我們提到了一些密碼的粗略的介紹,了解了HTTPS的重要性,這一講我們來實作 HTTPS伺服器。因為我們的目的只是不要讓密碼採用明碼的方式傳遞,而不是真正的電子交易交易,也不是要簽署PDF的公文,所以我們採用免費的 StartSSL 來實作。但台灣法規並不允許 StartSSL 的合法性,所以比起那些正牌,例如: VeriSign 每年幾萬塊的費用,是不可以比較的。還有Start SSL的簽證是一年一簽的,所以一年過去就到期了,必須重新簽署,寫這篇文章也是讓一年後的我可以參考備忘。

首先我們要準備什麼呢?

  1. 你必須能夠登入必且可以拷貝檔案到你的主機與帳號,而主機已經安裝好 Apache2並且正確運作。請事先檢查 openssl 是否安裝好。
  2. 一個合法的 email而且可以立刻收信的環境(qq.com/freemail.com/rambler.ru/mailnull.com laposte.fr/yopmail.com 不可以使用,我用hotmail.com),最好Chrome可以登入這個信箱,因為StartSSL送出來的信會被Hotmail列入垃圾郵件,所以用Chrome檢查所有信件。不要用 Outlook,太慢了。
  3. 一個 .com 域名( .idv.tw 或是 .me應該是可以的),dyndns.org 這種不行。
  4. 以及IE Browser,因為我猜想後面可能會裝ActiveX元件,所以還是用IE Browser比較保險(理論上來說Chrome也是可以的)。

首先用IE登入 Start SSL,一開始你可以看到這個畫面,因為是第一次登入,先註冊(sign up)您的個人資料吧

StartSSL1

等一會就會出現下面畫面,填寫好你所有個人資料(用英文),然後按 “Continue”繼續下一步。注意,電子郵件信箱必須有效。

StartSSL2

 

送出之後會有一個提醒對話框,按”確定”進行下一步。

StartSSL3

這時候StartSSL已經寄出第一封電子郵件到你的信箱,所以會出現一個要求確認電子信箱的畫面,用Chrome登入剛剛註冊填寫的信箱裡面看,有可能在垃圾信箱裡面,檢查心的信件裡面有一個16個字元(例如:123abc456defxokwqrt)的英文數字夾雜的字串(這是第一封信),把這個字串貼過來複製到對話框內,再按下 “Continue” 繼續。

StartSSL4

 

如果沒有錯誤,會出現這個畫面,他的意思是說他會人工審核你的SSL需求,所以你必須等一下,最多六個小時可以完成。之後,網頁就會跳回去原來登入畫面了。現在你能做的就是耐心的等待,直到你的信箱有 StartSSL 的另外一封信(所以你最好採用網頁可收信的信箱)。

StartSSL5

我大約是五分鐘就收到了,這封信裡面會有一個連結 https://www.startssl.com/….,然後點選這個網址,或是直接拷貝網址貼到IE的網址欄。還有這封信裡面有另一個16位的英文數字夾雜的字串(與上一封的類似,但這是第二封信),把它給貼過來。之後按 “Continue” 繼續。

StartSSL6

之後會出現下面畫面,意思是你的SSL要2048  bit或是4096 bit,不要因為4096比較大就用4096,我知道CubieTruck的系統效能不是太好,反正只是要阻擋明碼外流,我選 2048 Medium Grade就好了,當然你也可以選 4096 High Grade試試看!選好了按 “Continue” 繼續。

StartSSL7

然後出現你應該要允許這個憑證的訊息,按下 “確定”進行下一步。

StartSSL8

然後一直按 “Install” 或確定讓這個憑證安裝到你的電腦。直至出現下面畫面,按下 “Continue” 繼續。

StartSSL9

然後回到 StartSSL 畫面,應該可以到 “Control Panel” 裡面。裡面有三個書籤,分別是Tool Box/Certificates Wizard/Validations Wizard,先選Validation Wizard。在 Type 上選擇 “Domain Name Validation“,因為剛剛電子郵件已經認證過了,所以現在要驗證域名了。然後按下 “Continue” 繼續下一步。

StartSSL10

等一下會出現下面視窗,選擇你的域名(.com或是其他),以及你的 domain name(不含前面 www. 和後面 .com)。例如申請 www.abc.com的SSL憑證,那就輸入 abc 然後選 .com 就好。輸入完成後,按下 “Continue” 繼續。

StartSSL11

選擇你剛剛的電子郵件信箱(最後的選項),然後按下 “Continue” 繼續。

StartSSL12

這時候,StartSSL又會寄另外一封信到那個信箱去(這是第三封),裡面還是有另一個16位的英文數字夾雜的字串,把它貼過來複製到空白框內,再按下 “Continue” 繼續。

StartSSL13

之後StartSSL會告訴你的域名驗證成功了,出現下面畫面後按 “Continue” 繼續。

StartSSL14

完成域名驗證後,接下來就是申請 SSL 證書了,首先改點選中間 Certificates Wizard 進行申請流程,然後選擇 Web Server SSL/TLS Certificate

StartSSL15

然後你設定你的密碼,密碼必須超過10個字元,長一點沒關係,最多32個字元,以後只會在CubieTruck上用到一次(明年會不會用到我不知道)。Key Size 我是選 2048 Medium Grade。還有如果選 SHA2的話,比較舊的作業系統,例如:Win 98/ME/XP會不認識。確定好之後,按 “Continue”繼續。

StartSSL16

之後StartSSL會先產生一個私鑰給你,按確定讓他產生吧!

StartSSL17

然後私鑰舊產生了,把對話框裡面 —–BEGIN RSA PRIVATE KEY—– 那一整欄一字不漏全部複製下來,用編輯器 Notepad/UltraEdit 複製貼進去,並另存為 ssl.key 檔案。然後按下 “Continue” 繼續下一步驟。建議你獨立建立一個 key 資料夾,把後面檔案(總共有四個)全部放到這個目錄。

StartSSL18

之後是增加網域,就是你之前設定,確定後按 “Continue” 繼續下一步驟。

StartSSL19

然後設定 Sub domain,沒有意外就是 www 了,確定後按下 “Continue” 繼續下一步驟。

StartSSL20

之後他會告訴你 Class1/Class2 域名的憑證都準備好了,確認完之後按下 “Continue” 繼續下一步驟。

StartSSL21PNG

之後,又是漫長的等待了,他上面是說最多三小時,有的話會以電子郵件通知你。有空就去檢查一下電子郵件信箱吧!

StartSSL22

這次會比較久,大約十五分鐘,收到信之後,就改點選第一個 Tool Box頁面,再選擇 “Retrieve Certificate”  這個欄位,

StartSSL23

然後會出現這個畫面,選擇你剛剛要簽署的域名,確認後按 “Continue” 繼續下一步。

StartSSL24

過幾秒之後,你的憑證就出現在一個Box裡面,—–BEGIN CERTIFICATE—–為開頭,把這個對話框內容一字不漏地複製到檔案 ssl.crt (新建一個檔案,用編輯器複製貼進去。),所以你目前有兩個檔案了,一個是 ssl.key,另一個就是這個 ssl.crt。複製完,在頁面左手邊找到 “StartCom CA Certificates ” 點選進去。

StartSSL25

然後出現下面畫面,在 StartCom Root CA (PEM Encoded) 點選然後另存新檔成 ca.pem,在Class 1 Intermediate Server CA 然後另存新檔sub.class1.server.ca.pem,在StartSSL 操作也告一段落,所以這過程我們可以獲得四個檔案。

StartSSL26

分別是

  1. ssl.key
  2. ssl.crt
  3. ca.pem
  4. sub.class1.server.ca.pem

然後不管你用 Samba/SCP/SDCard/USB/FTP什麼方法,把這四個檔案傳送到你的 CubieTruck ,先放到自己的目錄。接下來我們要用 openssl 解開你的私鑰,如果沒有的 openssl ,請先用(CubieTruck我都預設帳號是 root,如果不足者,請在命令前面加上 sudo )

apt-get install openssl

安裝完之後,在這四個檔案目錄下輸入下面指令來產生私鑰。

 openssl rsa -in ssl.key -out private.key

這時候你會被要求輸入一個密碼,就是在StartSSL 上面那個10個字元以上,32個字元以下的密碼,這個密碼之後不會再用到了。於此,我們有了第五個檔案, private.key。這五員大將到齊,就是來設定 Apache 了。

第一步驟,把Apache的 ssl 模組打開,然後重啟服務,然後建立容納那五個檔案鑰匙的目錄,然後把那五個檔案(其實ssl.key不用拷貝是可以的)都拷貝到 /etc/apache2/ssl 目錄來。

a2enmod ssl
service apache2 restart
mkdir -p /etc/apache2/ssl
cp ~/key/* /etc/apache2/ssl

事實上,只有這四個檔案是必須要拷貝到 /etc/apache2/ssl 目錄,ssl.key好好保管就可以了

  1. private.key
  2. ssl.crt
  3. ca.pem
  4. sub.class1.server.ca.pem

基本上不會有太大問題,如果模組掛不上,請到網路上找找,不會太難的。然後到 apache2 的設定檔,CubieTruck 路徑預設是 /etc/apache2/sites-enabled/000-default去編輯,你應該可以看到長得像這樣的敘述。

<VirtualHost *:80>
…..
…..
…..
</VirtualHost>

這個段落是描述HTTP 80 Port的,我們要產生一個給HTTPS 443 Port。所以把這樣一個段落複製一遍貼到檔案最後面,再把這個複製的段落中的 <VirtualHost *:80> 改為 <VirtualHost *:443> (HTTPS Port),並且在段落中加入下面六行,表是打開SSL,並且指出鑰匙檔案位置

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/private.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem

讓整個看起來像是

<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/private.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem

ServerAdmin webmaster@localhost
.....
.....
.....
</VirtualHost>

如果沒有錯誤,那就可以重啟 apache2 服務了,

service apache2 restart

如果有失敗,請到 /var/log/apache2/error.log 看看錯誤的原因在哪裡。

如果啟動成功,恭喜你,你的 HTTPS伺服器已經啟動了。如果有防火牆,不要忘了把 443 Port 給打開

ufw enable 443
ufw reload

對了,記住簽署日期,因為 StartSSL 的簽證只有一年有效的,過了一年你還是要簽的,如果還是免費的話。