前言

之前已经介绍过如何把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. [Boost::Polygon]多边形相减得到新的多边形序列

    #include <iostream> #include <boost/polygon/polygon.hpp> #include <cassert> namesp ...

  2. c语言的label后面不能直接跟变量申明

    ; goto JUMP; printf("x is : %d\n",x); JUMP: ; <=== 错误,lable后面不能申明变量,只能是表达式语句(statement) ...

  3. Java SAX Schema Validation

    It is possible to turn on XML Schema validation during parsing with a SAXParser. Here is how it look ...

  4. final、抽象类、接口、多态、

       final———最终.作为一个修饰符 可以修饰类. 函数. 变量: 被final修饰的类不可以被继承: 被final修饰的方法不可以被重写: 被final修饰的变量只能够被赋值一次,既可以修饰成 ...

  5. 搭建Struts框架

    搭建Struts框架 新建项目 [file]-[new]-[web project] 在弹出的对话框中对项目进行命名,点击[finish] 新建项目-> 点击项目右键-> MyEclips ...

  6. Jupyter Notebook PDF输出的中文支持

    Jupyter Notebook是什么 Jupyter Notebook是ipython Notebook 的升级.Jupyter能够将实时代码,公式,可视化图表以Cell的方式组织在一起,形成一个对 ...

  7. RichTextBox选中文本时往自己的其他的位置实现拖拽

          private void Form1_Load(object sender, EventArgs e) { richTextBox1.AllowDrop = true; richTextB ...

  8. Android自定义“图片+文字”控件四种实现方法之 二--------个人最推荐的一种

    http://blog.csdn.net/yanzi1225627/article/details/8633872 第二种方法也要新建一个图片+文字的xml布局文件,然后写一个类继承自LinearLa ...

  9. 详解Android动画之Tween Animation

    前面讲了动画中的Frame动画,今天就来详细讲解一下Tween动画的使用. 同样,在开始实例演示之前,先引用官方文档中的一段话: Tween动画是操作某个控件让其展现出旋转.渐变.移动.缩放的这么一种 ...

  10. mysql的优化措施,从sql优化做起

    http://geeksblog.cc/2016/06/11/mysql-optimize/ 优化sql的一般步骤 通过show status了解各种sql的执行频率 定位执行效率低的sql语句 通过 ...