摘 要:MatrixSSL是針對小型應(yīng)用程序和設(shè)備設(shè)計的嵌入式、開放源碼SSL協(xié)議棧,通過它可在嵌入式環(huán)境中實現(xiàn)可訂制的嵌入式SSL安全解決方案。
關(guān)鍵字:安全套接字;MatrixSSL;嵌入式系統(tǒng)
1引言
在過去幾年里Internet和嵌入式技術(shù)發(fā)展迅速,Internet在服務(wù)器、桌面機(jī)和包括PDA和小型電話的便攜式電腦上應(yīng)用迅速增長。隨著更簡單、資源更受限制連接到WEB的設(shè)備(探測器、家居設(shè)備、個人醫(yī)療設(shè)備)數(shù)量增長,這種趨勢將會繼續(xù)。具有傳感和通信功能的嵌入式設(shè)備將計算機(jī)技術(shù)應(yīng)用于今天不尋常的設(shè)備(現(xiàn)場監(jiān)控,醫(yī)療緊急響應(yīng)、戰(zhàn)場管理和家居自動化)中變成可能。這些嵌入式應(yīng)用都具有安全需要,沒有足夠的安全,攻擊者可以控制這些嵌入式設(shè)備并引發(fā)災(zāi)難性的反應(yīng)。
SSL[1]是今天在Internet上的安全協(xié)議,它內(nèi)建于很多流行的應(yīng)用程序里,包括所有的WEB瀏覽器,并且廣泛被信任用于加強(qiáng)敏感信息傳輸包括:在線銀行,證券交易和電子商務(wù)。SSL 采用數(shù)字證書、對稱/ 非對稱密鑰加密、消息摘要和數(shù)字簽名等技術(shù)提供身份認(rèn)證、數(shù)據(jù)保密、數(shù)據(jù)完整性三大安全服務(wù),可以為嵌入式系統(tǒng)提供一個完善的安全解決方案。但現(xiàn)有大多數(shù)SSL協(xié)議實現(xiàn)都沒有針對嵌入式系統(tǒng),不適合于嵌入式Internet要求。
MatrixSSL[3]是針對小型應(yīng)用程序和設(shè)備設(shè)計的嵌入式、開放源碼SSLv3協(xié)議棧(商業(yè)版支持TLS協(xié)議)。它減少了將SSL整合進(jìn)嵌入式工程的復(fù)雜性,使用一個簡單的API和安全層,用戶可以很容易地將MatrixSSL整合到它們的應(yīng)用程序。Matrixssl使用工業(yè)界標(biāo)準(zhǔn)的加密算法(RC4、DES3、AES、RSA)和協(xié)議,它確保用戶獲得一個編譯不到50K(Openssl[2]需要1M左右)的提供強(qiáng)大和可靠安全解決方案的庫函數(shù),并具有可插拔密碼套件、算法和可移植性強(qiáng)等特點,可以方便定制密碼套件和算法以及平滑地向多平臺移植,非常適合在資源受限的嵌入式環(huán)境中使用。
2 MatrixSSL程序流程
MatrixSSL庫函數(shù)沒有針對某一具體的傳輸協(xié)議,它采用公共API方式可以非常理想的保護(hù)傳輸于任何虛擬通信通道上的數(shù)據(jù),不但可用在TCP/IP上也可用于串口通信上,但主要的MatrixSSL整合用于保護(hù)在TCP套接字上計算機(jī)系統(tǒng)間的數(shù)據(jù)。由于MatrixSSL庫函數(shù)沒有專門針對TCP/IP,在使用時需要對公共API進(jìn)行封裝以滿足在具體傳輸層上的需要。MatrixSSL提供了對公共API封裝的一個套接字實例(可根據(jù)需要自行對公共API進(jìn)行封裝),通過調(diào)用封裝的套接字API接口可以非常容易地實現(xiàn)SSL協(xié)議。下面將按照封裝API套接字在應(yīng)用程序中整合點來分析它們:
1)初始化MatrixSSL庫函數(shù)
在使用Matrixssl前需要對協(xié)議進(jìn)行初始化,調(diào)用公共API實現(xiàn)對庫函數(shù)初始化:
int matrixSslOpen();//初始化庫函數(shù)數(shù)據(jù)結(jié)構(gòu)
int matrixSslReadKeys(sslKeys_t **keys, char *certFile, char *privFile,
char *privPass, char *trustedCAcertFiles);// 加載相關(guān)的證書和私鑰文件
2)創(chuàng)建SSL會話連接
在初始完畢后,就可以創(chuàng)建會話和握手過程,Matrixssl將這兩個功能在客戶端和服務(wù)器端的一個封裝函數(shù)中完成??蛻舳耸褂胹slConnect替代原始的Connect完成SSL握手過程,并制定對服務(wù)器端證書的驗證方式:
int sslConnect(sslConn_t **cp, SOCKET fd, sslKeys_t *keys, sslSessionId_t *id,
short cipherSuite, int (*certValidator)(sslCertInfo_t *t, void *arg));
服務(wù)器端用sslAccept函數(shù)代替?zhèn)鹘y(tǒng)的Accept函數(shù)完成握手過程,并制定對客戶端證書的驗證方式:
int sslAccept(sslConn_t **cp, SOCKET fd, sslKeys_t *keys,int (*certValidator)(sslCertInfo_t *t, void *arg), int flags);
3)進(jìn)行數(shù)據(jù)傳輸
在握手完成后,就可以進(jìn)行安全的數(shù)據(jù)傳輸了。在數(shù)據(jù)傳輸階段,需要使用sslRead和sslWrite函數(shù)代替?zhèn)鹘y(tǒng)的read()和write()函數(shù),完成對套接字的讀寫操作:
int sslRead(sslConn_t *cp, char *buf, int len, int *status);
int sslWrite(sslConn_t *cp, char *buf, int len, int *status);
4)結(jié)束SSL通信
當(dāng)客戶機(jī)和服務(wù)器之間完成數(shù)據(jù)通信后,調(diào)用下面函數(shù)來釋放SSL資源:
void sslWriteClosureAlert(sslConn_t *cp);//發(fā)出關(guān)閉連接的警告
void sslFreeConnection(sslConn_t **cpp)//關(guān)閉由握手過程中打開的會話并釋放緩沖區(qū)
void matrixSslFreeKeys(sslKeys_t *keys); // 釋放創(chuàng)建的密鑰
void matrixSslClose();//清除Matrixssl庫函數(shù)
MatrixSSL對普通網(wǎng)絡(luò)編程接口也進(jìn)行了封裝,方便了編程調(diào)用,以下是封裝的普通網(wǎng)絡(luò)編程接口(也可直接調(diào)用網(wǎng)絡(luò)編程接口而不封裝):
SOCKET socketListen(short port,int *err) // 創(chuàng)建一個新的套接字并綁定到給定端口
SOCKET socketAccept(SOCKET listenfd, int *err);// 為到來的請求創(chuàng)建一個套接字
SOCKET socketConnect(char *ip, short port, int *err);// 創(chuàng)建一個新的套接字并且連接到給定IP和端口的監(jiān)聽套接字
Void socketShutdown(SOCKET sock);// 關(guān)閉一個套接字
void setSocketBlock(SOCKET sock);// 設(shè)置一個套接字為阻塞模式
void setSocketNonblock(SOCKET sock);// 設(shè)置一個套接字為非阻塞模式
void setSocketNodelay(SOCKET sock);//在套接字上設(shè)置NO_DELAY選項,禁止Nagle 算法
3 MatrixSSL實例程序
1證書的生成
與普通的網(wǎng)絡(luò)通信應(yīng)用程序不同,基于Matrixssl的程序運行時需要相應(yīng)的證書和私鑰文件實現(xiàn)對客戶端和服務(wù)器端的身份驗證。Matrixssl提供對Openssl格式證書的支持,證書和私鑰可以由Openssl應(yīng)用程序生成。以下是一個證書的生成過程:
1) 創(chuàng)建一個CA證書的私鑰和自簽署CA證書
生成由DES3加密的RSA私鑰文件:OpenSSL genrsa -des3 -out CA.key 1024
使用CA的私鑰創(chuàng)建一個自簽署的CA證書:OpenSSL req -new -x509 -days 365 -key CA.key -out CA.crt
2)為服務(wù)器端創(chuàng)建由CA簽署的證書
生成服務(wù)器的RSA私鑰文件:OpenSSL genrsa -des3 -out server.key 1024
生成服務(wù)器的證書請求文件:OpenSSL req -new -key server.key -out server_auth.csr
生成由CA簽署的服務(wù)器證書文件:OpenSSL x509 -req -days 365 -in server_auth.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out server_auth.cert
3)為客戶端創(chuàng)建由CA簽署的證書
創(chuàng)建過程與服務(wù)器證書生成過程同。
2 應(yīng)用程序?qū)嵗?br />
以下是一個簡單的基于MatrixSSL的應(yīng)用程序,說明如何使用封裝的套接字在嵌入式系統(tǒng)中實現(xiàn)一個安全的WEB服務(wù)器,該程序使用MatrixSSL1.2.4庫函數(shù)。在Linux下實現(xiàn)過程為:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include sslSocket.h
#define HTTPS_PORT 8001
static char keyfile[] = server.key;
static char certfile[] = server_auth.cert;
static char CAfile[] = CA.crt;
static const char page[] = HTTP/1.0 200 OK
Content-type: text/html
<html><head><title>this is MicroComputer information</title></head>
<body>This is MicroComputer information</body></html> ;
int main(int argc, char **argv)
{
sslConn_t *cp;
sslKeys_t *keys;
SOCKET listenfd, fd;
unsigned char buf[1024];
int ret,status,err,flags;
flags = 0;
char *password;
password=immortalluo;
cp = NULL;
if (matrixSslOpen() < 0) {
fprintf(stderr, matrixSslOpen failed, exiting...);
} //初始化庫函數(shù)
if (matrixSslReadKeys(&keys, certfile, keyfile, password, CAfile) < 0) {
exit(0);
} //從磁盤文件中讀取證書和相關(guān)的密鑰資料,并使用密碼對加密的私鑰解密
if ((listenfd = socketListen(HTTPS_PORT, &err)) == INVALID_SOCKET) {
exit(1);
} //在特定的端口上監(jiān)聽客戶端的請求
setSocketBlock(listenfd); //將套接字設(shè)置為阻塞模式
while(1){
if ((fd = socketAccept(listenfd, &err)) == INVALID_SOCKET) { continue; } //接受一個客戶端的請求
if ((ret = sslAccept(&cp, fd, keys, NULL, flags)) != 0) {
socketShutdown(fd);
continue; }//完成握手過程
ret = sslRead(cp, buf, 1024, &status); //讀取客戶端的請求
if (ret < 0 || status == SSLSOCKET_EOF ||status == SSLSOCKET_CLOSE_NOTIFY){
socketShutdown(cp->fd);
sslFreeConnection(&cp);
continue; } //判斷客戶端是否請求關(guān)閉
ret = sslWrite(cp, page,(int)strlen(page), &status); //向客戶端發(fā)送靜態(tài)網(wǎng)頁
if (ret < 0) {
socketShutdown(cp->fd);
sslFreeConnection(&cp);
continue;}
sslWriteClosureAlert(cp); //向客戶端發(fā)送關(guān)閉警告
socketShutdown(cp->fd);
sslFreeConnection(&cp);
}
socketShutdown(listenfd);
matrixSslFreeKeys(keys);
matrixSslClose();
}
4 結(jié)束語
Matrixssl是一個可定制的小型SSL函數(shù)庫,具有可移植、可擴(kuò)展、可裁減的特點,充分滿足了嵌入式環(huán)境小、特、專、精的特點非常適合在嵌入式系統(tǒng)中提供安全解決方案;但是Matrixssl只支持RSA共鑰加密,考慮到效率因素,可在Matrixssl中實現(xiàn)更適合嵌入式環(huán)境的ECC公鑰加密體制,這是下一步研究目標(biāo)。
參考文獻(xiàn):
1 SSL 3.0 Specification[EB/OL]. http://wp.netscape.com/eng/ssl3/
2 OpenSSL. The Open Source Toolkit for SSL-TLS[EB/OL]. http://www.openssl.org/
3 PeerSec Networks,“MatrixSSL-Open Source EmbeddedSSL”[EB/OL], http://www.matrixssl.org/
基于MatrixSSL的嵌入式系統(tǒng)中SSL協(xié)議實現(xiàn)
更新時間: 2007-06-06 13:59:24來源: 粵嵌教育瀏覽量:675
推薦閱讀
- ·Linux字符設(shè)備驅(qū)動框架解析:file_operations的核心作用與實現(xiàn)
- ·廣東朝歌數(shù)碼科技股份有限公司專場招聘會
- ·深化產(chǎn)教融合,共筑技能人才培養(yǎng)新生態(tài) —— 廣州華立學(xué)院到訪粵嵌從化校區(qū)為深化產(chǎn)教
- ·校企合作新突破 | 粵嵌科技與三亞學(xué)院共探產(chǎn)教融合新路徑
- ·粵嵌科技入選國家級職業(yè)數(shù)字展館聯(lián)合建設(shè)單位,賦能計算機(jī)程序設(shè)計員高技能人才培養(yǎng)
- ·嵌入式實時操作系統(tǒng)的性能優(yōu)化與實現(xiàn)路徑
- ·校企攜手賦能教育!粵嵌科技助力海南科技職業(yè)大學(xué)探索 AGI 時代教學(xué)新范式
- ·嵌入式系統(tǒng)中的低功耗設(shè)計策略與實現(xiàn)路徑
- ·深圳市軒宇軟件開發(fā)有限公司專場招聘會
- ·嵌入式系統(tǒng)中的代碼空間優(yōu)化:策略與實踐