背景
boa是一个常用于嵌入式的web server,本身是无法支持https的连接的。
这里就是要解决这个问题。
思路
这里并没有采用修改boa的思路,而是增加其他部件来间接实现。
这里,选择了反向代理pound或ssl包装器stunnel。
客户发送的web请求,先到pound/stunnel监听的端口那,pound/stunnel将SSL连接转换为普通的HTTP,再送给boa服务器。
这样,通过简单的增加一层的方式,来漂亮的解决这个问题!
实现
可以采用ssl包装器 stunnel或反向代理pound来实现,stunnel会比pound更简单。
应用stunnel
交叉编译
下载stunne源码,例如我下载的是stunnel-5.38
交叉编译
./configure --host=arm-none-linux-gnueabi
stunnel比pound好的一个地方就是可以支持openssl0.9.8,这样,单板无需额外拷贝新版本的openssl库
stunnel
编写配置文件
[web_https]
accept = 8080
connect = 127.0.0.1:80
cert = stunnel.pem
pem文件
上面配置文件中出现的pem文件,是一个将private key和certificate合并的文件,具体知识可以google。
制作方法如下:
openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
cat key.pem cert.pem >> stunnel.pem
这个是我做出来的pem文件。
stunnel.pem
运行
上面产生了全部的三个文件:
stunnel (执行程序)
stunnel.conf (配置文件)
stunnel.pem (认证文件)
假设都放在一个目录下
./stunnel stunnel.conf
即可运行
应用pound
下载pound源码,例如我下载的是Pound-2.7
交叉编译
./configure --host=arm-linux-gnueabi --with-ssl=/usr/arm-linux-gnueabi/openssl
注意:如果需要静态链接, 上面加上LDFLAGS=”-static” 即可
下面是一个使用静态链接做出来的pound(免得库不一致带来的问题)。
pound
编写配置文件
假设命名配置文件为pound.cfg
下面的配置的意思是,所有到单板8080端口的https都会变成http发送到本地的80端口
ListenHTTPS
Address 0.0.0.0
Port 8080
Cert "pound.pem"
Service
BackEnd
Address 127.0.0.1
Port 80
End
End
End
pem文件
同stunnel.pem,重命名即可
pound.pem
运行
上面产生了全部的三个文件:
pound (执行程序)
pound.cfg (配置文件)
pound.pem (认证文件)
假设都放在一个目录下
./pound -f pound.cfg &
即可运行
限制
以上功能,需要在内核>=2.6.28,才能使用。