如何在Root Android手機安裝StartSSL/StartCom憑證

我自己在CubieTruck架好了郵件伺服器,但總覺得常年在外使用免費的網路,帳號密碼以明碼傳送可能不安全,所以在CubieTruck加設了 POP3S(995)/SMTP TTLS(465)。我用的是 StartSSL 免費的憑證,在自己的電腦上 Outlook沒有問題,可以正常透過加密方式來收發信。但是Android手機就碰到問題了,一直說Java不認的StartSSL憑證,這也難怪,因為 StartSSL 是免費的,所以是可能有問題的。

所以我在網路上找了個方法,把StartSSL憑證手動給安裝進去(一般方法要設定解屏圖形密碼,但不需要Root),我的手機是Root的,所以可以採用這個方法,因為我討厭每次使用手機要滑來滑去!

首先我們必須先下載 StartSSL Class 1 的官方憑證,sub.class1.server.ca.pem

下載位址

然後把這個 sub.class1.server.ca.pem 檔案上傳拷貝到 CubieTruck 上去更改 Hash 檔名,然後在CubieTruck 終端機裡面輸入

# openssl x509 -in sub.class1.server.ca.pem -subject_hash_old -noout

之後 openssl 會告訴你 sub.class1.server.ca.pem 的 hash 檔名是 ea59305e,然後在把檔案更名為

# mv sub.class1.server.ca.pem ea59305e.0

然後在把 ea59305e.0 檔案拷貝到自己電腦裡面,好讓待會 adb 連線時可以上傳這個檔案,此外我們必須知道 Android 的憑證都放在 /etc/security/cacerts 目錄底下(我的手機是Android 4.0以上,2.2/2.3我並不確定),但是這個目錄是唯讀的,這才所以需要 root 手機來重新掛載檔案系統。所以你先在電腦裡面使用 adb 上傳檔案(ea59305e.0)並且連結到已經 root 手機上。

C:\adb> adb push ea59305e.0 /sdcard/temp -->假定 /sdcard/temp 是暫存空間
C:\adb> adb shell -> 用 adb 連結到 android 手機內

然後在把剛剛在 CubieTruck 處理過的檔案 ea59305e.0 拷貝到手機憑證目錄裡面  /etc/security/cacerts

# su
# mount -o remount,rw /system
# cd /etc/security/cacerts
# cp /sdcard/temp/ea59305e.0 /etc/security/cacerts
# chown root:root /etc/security/cacerts/ea59305e.0
# chmod 644 /etc/security/cacerts/ea59305e.0
# sync
# mount -o remount,ro /system

再用 Android 手機內的設定->安全性->信任憑證,是不是多了一個 StartCom Class 1 Primary Intermediate Server CA的憑證了呢?

後記:現成的憑證,省的自己去下載轉檔 載點,我試過4.1/4.2/4.3都可以行得通,測試條件是用AquaMail收POP3S和SMTPS over TLS,沒有再出現錯誤訊息,且收發信正常。

Android and Me

二十多年前,我雄了一次,今天我又雄了一次。

二十多年前,我考上雄中,我爸爸買了一台電腦算是獎賞我,是Acer 610,一台8086的PC,我記得附上了一套遊戲光碟,和一本類似"快快樂樂學Basic",大約是松崗出版的。

那套遊戲我很感興趣,但是感興趣的方式不太一樣,至少和我弟弟不太一樣。我弟弟是整天在玩遊戲,想著迫關,我倒是很好奇遊戲是怎麼寫的,剛剛考完聯考,反正也是閒著,就拿起那本廠商送的Basic書本讀了好幾天,腦袋裡面總想著這是怎麼寫出來的,不停用Load,print這些Basic指令想要了解他。你要知道那時候沒有英檢,大家英文程度普遍不好,裡面好多單字對一個國中畢業的我來說是很吃力的。

之後我苦學了半年Basic,才知道這遊戲原來這不是Basic寫的,至少不是直譯式語言寫的。有點像蹲了半年的馬步,才知道九陽神功不是蹲出來的,更。

所以我就開始雄起來學組合語言,我今天能吃這口飯,想想也是多少靠我當年那股傻勁,慢慢一步一步學的。若是我一開始就是玩電玩,現在怎樣都很難說。

今天,管他什麼禮拜一陣候群,一來公司就想是不是也得弄弄Android Programming。上網看了一下,決定學二十多年的那股傻勁,學了。

同事周邊都是業務人員,不是工程師,我看連Android英文怎麼拼都不知道,所以只能靠自己和Google大神了。首先上網知道要先安裝JDK,哇,檔案好大,安裝也很久,趁這個時候,我想了兩件事情。第一這是Java,所以ARM11有支援,Intel肯定出局了。第二,Java這種語言,Android這幾年會被效能給詬病。

裝完之後,改裝eclipse,不是口香糖那種牌子,是一種IDE,檔案不小,100MB左右,沒有安裝檔,unzip就好。但是緊接著要更新Android SDK,我放棄了。倒不是放棄學習,而是放棄在UBuntu上安裝,公司的MIS太機車了,Linux根本不能上網,又沒離線安裝檔,所以砍掉重練Windows。

重新再安裝一次Windows版本,終於安裝好了,開始寫我第一個Hello Android程式。不知道是太久沒寫程式,自己整個觀察力有點下降,我發現模擬器怎麼不太動,一直停留在Android訊息。上網Google好久,才知道他開機要40秒以上,我那四核的CPU都跑得很喘了,那我家的EEEBOX怎麼辦。得好好認真想想ATOM D525了。

突發奇想,為何不直接用Android手機當模擬器,我的網路攝影機不就這樣弄的嘛。乖乖,原來Google要發Nexus手機,一隻相同程式在手機上跑只要10秒不到,難怪,Google灑錢不是沒有原因的。

我的第一天我想這樣已經是極致了,獨自一人把環境從零建立起來,剩下來的就是苦學了。

十一點下班到家後,馬上到博客來書店買了幾本書,Google! Android 手機應用程式入門第三版和Google Android SDK開發範例大全,希望這次不會白白蹲了半年的馬步。