OpenMQ C Client on Mac
筆記:build OpenMQ C Client with ssl 跟 implementation的注意事項
版本:OpenMQ-C Client v.4.5
在4.x之前的版本,C Client官方不支援Mac 平台,不過有好心人,把之前寫的patch給我們
ref: http://java.net/projects/mq/lists/users/archive/2012-11/message/3
(官方說5.0會把這項patch加進去)
要先去下載nspr跟nss (我是用nspr-4.9.3跟nss-3.1.4)
裡面步驟很詳細,就不再贅述
因為本身很少接觸open source的東西,一整包source code下載下來,很沒有頭緒,所以這裡來很簡單地介紹一下source code的目錄結構,此外他們不是用makefile是用ant 作為build的工具
src/share/cclient/ ==> 這個就是 c client的source
/example/C --> 顧名思義,這裡就有範例啦~
src/buildant/ ==> ant build的設定
/rules.xml --> ant會先吃這個設定檔,在根據裡面資訊去找別的xml
/crule.xml --> 官方說,這個目前沒在用...看來他們對c client沒有很用力在maintain
其他沒用到的,就不清楚囉~ 有的就是文件,應該不用說明吧~
有興趣的也可以看這篇:
http://weblogs.java.net/blog/kalali/archive/2010/03/02/open-mq-open-source-message-queuing-beginners-and-professionals-0?force=159
client side的照好心人的步驟會產生出 libmqcrt.dylib,我是沒找到有.a或是.lib檔啦,所以....大家就要自己用動態load library了...可搜尋關鍵字, dlopen, dlsym
此外,libmqcrt.dylib會用到lib下的dylib,所以使用時,要把所有的dylib copy到你執行的目錄喔
SSL
如果你是走tcp連線,那照著example就沒問題了,如果你要走SSL,要照著以下步驟
1. Generate the NSS files certN.db, keyN.db, and secmod.db
在好心人的step by step中,有一個lib資料夾,裡面有certutil,切換你的working directory或是把
檔案copy出來皆可,執行以下command
i. certutil -N -d <your dir>
ii.certutil -A -n <certificate nickname> -t "p,p,p" -i <your certificate file> -d <your dir>
<your certificate file> : 從server gen出的certificate,der format就OK,不用轉pem
理論上會產生certN.db, keyN.db, secmod.db 跟pkcs11.txt在<your dir>下,不過我
的secmod.db沒產生出來,我就去source下面某個目錄偷過來,好像也OK,事後實驗,沒有
secmod.db好像也跑得好好的.....
建db時會需要輸入密碼,如果不想手動輸入,可以加參數 -f <password file>,file裡就直接放
密碼即可
2. 在client 建立connection前呼叫MQInitializeSSL(certpath),參數就是填你放上面那堆檔案跟
certificate的路徑囉,所以需要把那一堆東西放在同一個路徑下
3. 在建立connection前還要設以下的參數
MQ_CONNECTION_TYPE_PROPERTY : SSL
MQ_SSL_BROKER_IS_TRUSTED : false
MQ_SSL_CHECK_BROKER_FINGERPRINT : true
MQ_SSL_BROKER_CERT_FINGERPRINT : <your certificate MD5, ex:F6:A5:C1:F2:E6:63:40:73:97:64:39:6C:1B:35:0F:8E>
注意!!
跟ActiveMQ-CPP一樣,client連線的URI要用host name,不能用IP
就是MQ_BROKER_HOST_PROPERTY的值要設host name
ref: http://docs.oracle.com/cd/E19879-01/821-0030/aelbl/index.html
http://docs.oracle.com/cd/E18930_01/html/821-2439/aelbg.html#aelbl
留言
張貼留言