前言

之前已经介绍过如何把goahead移植到linux平台,现在再介绍goahead应用SSL的一些关键要点。因为此博文是继承于上一篇关于移植的博文,有不明白的请先回看。移植篇点这里

移植环境

goahead-3.4.9

arm + linux 2.6,交叉编译器arm-uclibc-gcc

移植要点

1、把me.h中和SSL相关的两个宏置为1。

#define ME_COM_OPENSSL 1
#define ME_COM_SSL 1

2、把原来删除掉的goahead-openssl/openssl.c再恢复回来。

3、修改makefile,把依赖的源文件加上,如下。

SOURCE_FILE = *.c goahead-openssl/openssl.c

4、此时编译可能会有问题,应该都是与openssl相关的,未声明或未定义之类的。是因为openssl版本低的问题。在我的编译环境中查看openssl版本,如下:

[root]$ openssl version
OpenSSL 0.9.8e-fips-rhel5 Jul

因此我决定自己下载openssl,自己编译成静态库,让goahead直接使用我编译的openssl库。我下载的openssl版本是openssl-1.0.0q,已经移植成功,编译之后的有用的内容包括lib/libssl.a、include、bin/openssl、ssl/openssl.cnf。关于openssl的移植请点这里

5、再修改makefile文件,使用我们自己编译的openssl。

CC=arm-uclibc-gcc
#CC=gcc #-Werror
FLAGS = -Wall -fPIC -g -O2 -s -ldl -lm -o LIB = -lstdc++ \
-lssl SSL_ARM_INCLUDE = ./openssl/arm/ssl/include
SSL_ARM_LIB = ./openssl/arm/ssl/lib
OBJ_ARM = libhttpspost_arm.so SSL_X86_INCLUDE = ./openssl/x86/ssl/include
SSL_X86_LIB = ./openssl/x86/ssl/lib
OBJ_X86 = libhttpspost_x86.so ifeq ($(CC),gcc)
SSL_INCLUDE = $(SSL_X86_INCLUDE)
SSL_LIB = $(SSL_X86_LIB)
OBJ = $(OBJ_X86)
else
SSL_INCLUDE = $(SSL_ARM_INCLUDE)
SSL_LIB = $(SSL_ARM_LIB)
OBJ = $(OBJ_ARM)
endif SOURCE_FILE = *.c goahead-openssl/openssl.c goahead: $(SOURCE_FILE)
$(CC) $(FLAGS) $@ $(SOURCE_FILE) -I$(SSL_INCLUDE) $(SSL_LIB)/libssl.a $(SSL_LIB)/libcrypto.a clean:
rm -rf goahead .PHONY: clean

6、重新编译goahead,应该能编译得过,可能会有一些warning。

7、使用编译出来的openssl生成私钥。

#生成私钥前先设置环境变量,否则会提示【WARNING: can't open config file: /usr/local/ssl/openssl.cnf】
export OPENSSL_CONF=../ssl/openssl.cnf #key名要符合me.h中的定义 #define ME_GOAHEAD_SSL_KEY "self.key"
openssl genrsa -out self.key 1024

8、使用编译出来的openssl生成证书。

#读书名要符合me.h中的定义 #define ME_GOAHEAD_SSL_CERTIFICATE "self.crt"
openssl req -new -x509 -key self.key -out self.crt -days

9、布署。把goahead、self.key、self.crt布署到板上,他们三个是在同一个目录下。

10、执行,此时执行goahead会有一些问题,提示

goahead: : Unable to set cipher list ......

此时最直接了当的解决办法是把openss.h中的相关一段代码注释掉即可。

    /*
Configure cipher suite
*/
/*
if (ME_GOAHEAD_SSL_CIPHERS && *ME_GOAHEAD_SSL_CIPHERS) {
ciphers = ME_GOAHEAD_SSL_CIPHERS;
} else {
ciphers = OPENSSL_DEFAULT_CIPHERS;
}
ciphers = mapCipherNames(ciphers);
trace(5, "Using OpenSSL ciphers: %s", ciphers);
if (SSL_CTX_set_cipher_list(sslctx, ciphers) != 1) {
error("Unable to set cipher list \"%s\"", ciphers);
sslClose();
wfree(ciphers);
return -1;
}
*/

11、注释后编译再执行,服务器的log会提示已经监听ssl服务的端口443,在浏览器中输入https://ip即可访问。

[/mnt/goahead]./goahead
goahead: : This system does not have IPv6 support
goahead: : Upload directory is /tmp
goahead: : Configuration for Embedthis GoAhead
goahead: : ---------------------------------------------
goahead: : Version: 3.4.
goahead: : BuildType: Debug
goahead: : CPU: arm
goahead: : OS: linux
goahead: : Host: 0.0.0.0
goahead: : Directory: /mnt/goahead
goahead: : Documents: web
goahead: : Configure: me -d -q -platform linux-x86-default -configure . -with openssl -gen make
goahead: : ---------------------------------------------
goahead: : Started http://*:80
goahead: : Started https://*:443
goahead: :
^^^^^^^^^^^ web start successful ^^^^^^^^^^^

嵌入式web server——Goahead启用SSL的更多相关文章

  1. 嵌入式web server——Goahead移植要点

    前言 在嵌入式设备中,在没有液晶显示的情况下,可以使用web来访问设备,查看设备的运行状态以及进行参数设置,类似于路由器设置.网上有很多关于各种web server的优劣的评论,在此不讨论,只是介绍其 ...

  2. 嵌入式 Web Server 温度检测系统

    1. Web Server 服务器后台表单处理程序:使用 CGI 程序接口编写后台程序的 Web 服务器. 2. Boa 服务器

  3. (4.22)Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例

    如何通过使用 Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例 关键词:MSSQL加密,sql server加密,sql server客户端与服务器传输内容加密 转自:h ...

  4. Web API 2 使用SSL

    在Server上启用SSL 稍后我会想在IIS 7 上配置SSL,现在先往下看. 本地测试,您可以启用SSL的IIS Express Visual Studio.在属性窗口中,启用SSL设置为True ...

  5. GoAhead 嵌入式web

    https://embedthis.com/goahead/ 入手了一个360  4g  wifi :使用jquery  .goahead Goahead webserver编辑 GoAhead We ...

  6. Thawte SSL Web Server 多域型SSL证书

    Thawte SSL Web Server 多域型SSL证书,最多支持25个域名,需要验证域名所有权和申请单位信息,属于企业验证型SSL证书,提供40位/56位/128位,最高支持256位自适应加密. ...

  7. Thawte SSL Web Server

      Thawte SSL Web Server ,需要验证域名所有权和申请单位信息,属于企业验证(OV)型SSL证书,提供40位/56位/128位,最高支持256位的自适应加密.被2048位的根证书签 ...

  8. 嵌入式web服务

    :boa.thttpd.mini_httpd.shttpd.lighttpd.goaheand.appweb和apache等. Boa 1.介绍 Boa诞生于1991年,作者Paul Philips. ...

  9. ZeroC Ice启用SSL通讯的配置

    Zeroc ICE ( Internet Communications Engine )中间件号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯 ...

随机推荐

  1. Parallels Desktop 7用bootcamp安装win7 后如何激活WIN7

    在parallels的选项中,在硬件选项卡的引导标记中添加:kernel.waet.enable=0 ,重新启动win7即可激活.

  2. .net常見面試題(四)

    1. .Net.C#.VisualStudio之间的关系是什么? .Net一般指的是.Net Framework,提供了基础的.Net类,这些类可以被任何一种.Net编程语言调用,.Net Frame ...

  3. [转] rtp h264注意点(FU-A分包方式说明)

    总括: 一帧视频数据可以编码成多个H264的NALU, 每个NALU的开头为00 00 00 01: 一个RTP包可以传送 部分.一个或多个 NALU,看NALU的大小而定. 之前写过一篇文章,分析了 ...

  4. window系统上用PHP获取本地物理IP代码

    <?php $res=system("ipconfig -all"); $contents=trim(ob_get_clean()); $contents=str_repla ...

  5. in和exists的区别与SQL执行效率分析

    可总结为:当子查询表比主查询表大时,用Exists:当子查询表比主查询表小时,用in SQL中in可以分为三类: 1.形如select * from t1 where f1 in ('a','b'), ...

  6. div+css的兼容性问题和解决方法

    1. 默认的内外边距不同 问题: 各个浏览器默认的内外边距不同 解决: *{margin:0;padding:0;}   2. 水平居中的问题 问题: 设置 text-align: center    ...

  7. Unity EditorWindow 笔记

    一:功能 1.实例化 //设置插件在菜单栏的位置 和快捷键 [MenuItem("YCC's Tools/模型更改/更改父物体和测量长度 %W")] //实例化窗体 static ...

  8. 征服 Redis + Jedis + Spring (三)—— 列表操作【转】

    一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 相关链接: 征服 Redis 征服 Re ...

  9. 从robots.txt開始网页爬虫之旅

    做个网页爬虫或搜索引擎(下面统称蜘蛛程序)的各位一定不会陌生,在爬虫或搜索引擎訪问站点的时候查看的第一个文件就是robots.txt了.robots.txt文件告诉蜘蛛程序在server上什么文件是能 ...

  10. Btrace

    http://www.iteye.com/topic/1005918 背景 周五下班回家,在公司班车上觉得无聊,看了下btrace的源码(自己反编译). 一些关于btrace的基本内容,可以看下我早起 ...