發表文章

目前顯示的是有「openssl」標籤的文章

[Security] openssl test (續三)

好的,先排除任何版本的bug,簡單解釋一下openssl程式的架構,其實我也不是很熟,只是為了硬加入一個功能,大致上簡單瞭解了一些,怕自己忘記,就把我瞭解的紀錄下來了。 在openssl的程式目錄中,各種加密的方式在crypto/下都有獨立的目錄,但是把這些加密方式串連起來的核心是在apps/和ssl/目錄下的程式。 但,如果你是直接呼叫openssl library的人,基本上是用不到apps/下的東西,因為apps下的程式,通常是給在系統下要呼叫openssl的命令去進行一些簡單的測試。 先提一下... 由於openssl是在網路封包上,將Data channel的部分透過加密後,再封裝至socket中,我指的socket就是網路程式的一個介面,必須經過create socket -> bind socket -> listen socket -> accept socket,才能完成一條跟Client互相溝通的Session。 當然這個過程socket自然就會跟network的driver進行互動了。而openssl為了將加密後的封包包入socket中,自然他就會有自己的socket library,而我們只要透過ssl_read或ssl_write的方式就能透過已經建立的加密連線去丟送封包。 好的,接下來就是我真正想講的重點了。假定你是使用linux的user,那你呼叫openssl的命令時,其實你就是呼叫了apps/openssl.c這隻程式的main function,進而帶入參數後,它就會再跳轉到你帶入參數的下一隻程式中。 比如我們先前的Command是#openssl s_server xxxxx.... 它就會先進到openssl.c的main function中,再帶轉到s_server.c的程式中,而s_server跟s_client也就在apps下的s_server.c跟s_client.c。 我簡單拉出幾個openssl s_server從init到等待client中間會用到的幾個重要function。 Server - apps/s_server.c : MAIN() >  meth=SSLv23_server_method(), SSLv3_server_met...

[Security] openssl test (續二)

繼 上一篇 ,事實上openssl在0.9.8x版似乎是不支援DTLS,而到了1.0.0版終於開始支援DTSL,但我印象中要到1.0.0d才解掉了DTLS大多數的Bug。而x509的bug則是在0.9.8i才解決,否則會無法使用x509 server端的cert key。 基礎的加密、解密過程我就不作解釋,有興趣的朋友可以研究一下密碼學的發展跟運作。 當初我為了讓x509的功能可以正常運作,就把0.9.8e版的openssl升級到0.9.8i,就把一版psk key可以運作的版本加到我們的Device中。 而讓我最頭痛的問題是將openssl 0.9.8i版加入DTLS的功能。 我們生來只在學校讀過密碼學,對openssl極為陌生,於是我從測試命令開始學習。在 上一篇 大至瞭解了指令後,我們便可以透過 #openssl s_server -h的方式得到s_server的參數說明。 就在這時候我該拿出程式說明一下了,程式是怎麼開始進到s_server呢? 我們把從openssl組織download下來的壓縮檔解開後,可以看到一大堆資料夾,我們測試角度來看,只需要關注apps/。因為大多數的測試指令都是由裡面的openssl.c開始帶起。 而整個openssl加密的原則跟運作都是被寫在ssl/中的程式中。 (待續)

[Security] openssl test (一)

有時候真的會一時懶散,就忘了把東西紀錄下來。 20111124 - 我記得剛進公司時,就被安排了,解決openssl的bug,跟增加一些小東西進去,基本上這東西我們公司似乎沒人用過,頂多只是拿它的測試程式來做一些簡單的測試。所以我拿到程式時的第一次件事,當然就是測試。 以下是psk + dtls的測試command,基本上 -psk_hint這個指令似乎是有問題的,後來我是自己修改後,才可以用,一般來說Ubuntu搭載預設是用openssl-0.9.8o,而我修改的版本是0.9.8i,所以不盡相同,據我所瞭解,openssl-1.0.0d的版本後,似乎才開始支援psk + dtls。 openssl s_server \ -psk_hint Brian \ -psk 1a2b3c \ -debug -state -dtls1 openssl s_client -connect localhost:4433 \ -psk 1a2b3c \ -psk_identity Brian \ -debug -state -dtls1 理論上如果你只是要試試看你的x509的憑證是不是work,那你首先要先持有三把憑證,因為我的測試都必須是server對client或client對server,所以基本上openssl裡面就會附贈一個預設憑證是server.pem、client.pem和root.pem,基本上server端要放server.pem跟root.pem,client端則是client.pem跟root.pem。但是必須說明的是,據說0.9.8i版以前的版本,在x509 + dtls是有問題的。 <待續>