嵌入式设备支持https

2019-07-12 19:13发布

1.appweb-src-2.4.2-2.tar.gz
2. openssl-1.0.1i.tar.gz
一、一般编译(没有ssl支持) 1.配置如下: [root@localhost appweb-src-2.4.2]# CC_FOR_BUILD=gcc CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-ld STRIP=arm-linux-strip ./configure --host=arm-s3c2410-linux --disable-shared     曾试过用shared但是没有成功,把libappweb.so.2复制到lib或/usr/lib下还是不行,提示找不到库     静态编译出的appweb大约有3.8M,在appweb-src-2.4.2/appweb目录下 2.     把它复制到开发板/usr/sbin目录     然后复制下列文件
[root@localhost sbin]# ls /opt/nfsroot/mnt/etc/appweb/
appweb.conf   groups.db   server.crt  server.key.pem mime.types  server.key  users.db 3.放置网页文件:     所有的页面放在此目录下,这个可以在/etc/appweb/appweb.conf中修改:/opt/nfsroot/mnt/etc/var/www/appweb-default 4.测试: ~ # appweb &
~ #    default:2 main  Configuration for Mbedthis Appweb
   default:2 main  --------------------------------------------
   default:2 main  Host:               localhost
   default:2 main  CPU:                arm
   default:2 main  OS:                 LINUX
   default:2 main  Distribution:       unknown Unknown
   default:2 main  OS:                 LINUX
   default:2 main  Version:            2.4.2.2
   default:2 main  BuildType:          DEBUG
   default:2 main  Started at:         Thu Jan  1 00:03:44 1970
   default:2 main  Log rotation count: 0
   default:2 main  --------------------------------------------
   default:2 main  Using server root: /etc/appweb
   default:2 main  Configuration via Command Line
   default:2 main  Document Root "/etc/appweb/web" [1] + Segmentation fault         appweb
测试应该指定配置文件,这和在Linux box上不同(好像在PC机上也要指定): ~ # appweb -f appweb.conf &
[1] - Done                       appweb -f appweb.conf
~ #    default:1 main  Error: Can't log errors to /var/log/appweb/error.log:2    default:1 main  Error: Ignoring bad directive "ErrorLog" at line 22 in /etc/appweb/appweb.conf
   default:1 main  Error: Bad group name: nobody
   default:1 main  Error: Missing an SSL Provider
   default:1 main  Error: Ignoring bad directive "SSLEngine" at line 380 in /etc/appweb/appweb.conf
   default:1 main  Error: Missing SSLEngine directive
   default:1 main  Error: Ignoring bad directive "SSLCipherSuite" at line 381 in /etc/appweb/appweb.conf
   default:1 main  Error: Missing SSLEngine directive
   default:1 main  Error: Ignoring bad directive "SSLProtocol" at line 382 in /etc/appweb/appweb.conf
   default:1 main  Error: Missing SSLEngine directive
   default:1 main  Error: Ignoring bad directive "SSLCertificateFile" at line 387 in /etc/appweb/appweb.conf
   default:1 main  Error: Missing SSLEngine directive
   default:1 main  Error: Ignoring bad directive "SSLCertificateKeyFile" at line 393 in /etc/appweb/appweb.conf
   default:1 main  Error: Can't open log file /var/log/appweb/access.log     出现这些错误是因为编译时的配置问题,大致是可以运行了,在浏览器中输入:http://192.168.1.106:7777就可以访问了。     基本上是可以使用了,如果访问的页面不存在,在终端会有相应的提示。针对上面的错误提示,以后再弄。
    另外编译各个文件时会有-mcpu=arm7tdmi这个选项,在网上也没有找到,但不影响运行。 三、OpenSSL的支持:     相关:在这里openssl目录是我编译好openssl后安装到的目录,如果要生成动态库的话就要修改openssl-0.9.8a目录中的Makefile第18行为:18:SHLIB_TARGET=linux-shared,然后
make && make build-shared  就会生成相应的动态库文件     下面开始为appweb添加openssl支持:
1.首先要修改/opt/sheji/appweb-src-2.4.2/http/modules/openSsl/Makefile文件注释掉61到82行,这几行是用来链接动态库的,在这里我们想把appweb链接成静态的:
61#$(BLD_MOD_DIR)/libcrypto$(BLD_SHLIB): $(BLD_OPENSSL_DIR)/libcrypto$(BLD_SHLIB)
62# cp $(BLD_OPENSSL_DIR)/libcrypto*$(BLD_SHLIB) $(BLD_MOD_DIR)
63# chmod 755 $(BLD_MOD_DIR)/libcrypto*$(BLD_SHLIB)
64# @if [ "$(BLD_HOST_OS)" = "LINUX" -a -f /etc/redhat-release -a -x /usr/bin/chcon ] ; then
65#  if [ "`sestatus | grep enabled`" != "" ]  ; then
66#   echo chcon /usr/bin/chcon -t texrel_shlib_t $(BLD_MOD_DIR)/libcrypto.so;
67#   priv chcon /usr/bin/chcon -t texrel_shlib_t $(BLD_MOD_DIR)/libcrypto.so;
68#  fi ;
69# fi
70# [ -x /sbin/ldconfig ] && ldconfig -n $(BLD_MOD_DIR) ; true
71
72#$(BLD_MOD_DIR)/libssl$(BLD_SHLIB): $(BLD_OPENSSL_DIR)/libssl$(BLD_SHLIB)
73# cp $(BLD_OPENSSL_DIR)/libssl*$(BLD_SHLIB) $(BLD_MOD_DIR)
74# chmod 755 $(BLD_MOD_DIR)/libssl*$(BLD_SHLIB)
75# @if [ "$(BLD_HOST_OS)" = "LINUX" -a -f /etc/redhat-release -a -x /usr/bin/chcon ] ;
76# then
77#  if [ "`sestatus | grep enabled`" != "" ] ; then
78#   echo chcon /usr/bin/chcon -t texrel_shlib_t $(BLD_MOD_DIR)/libssl.so;
79#   priv chcon /usr/bin/chcon -t texrel_shlib_t $(BLD_MOD_DIR)/libssl.so;
80#  fi ;
81# fi
82# [ -x /sbin/ldconfig ] && ldconfig -n $(BLD_MOD_DIR) ; true
endif
2.添加openssl时所需选项如下:
[root@localhost appweb-src-2.4.2]# CC_FOR_BUILD=gcc CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-ld STRIP=arm-linux-strip ./configure --host=arm-s3c2410-linux --disable-shared --port=80 --with-ssl=builtin --with-openssl=builtin --with-openssl-dir=/opt/sheji/openssl/lib --with-openssl-libpath=/opt/sheji/openssl/lib --with-openssl-iflags="-I /opt/sheji/openssl/include" --with-openssl-libs="ssl crypto" 3.复制/opt/sheji/appweb-src-2.4.2/appweb下的相应文件到/opt/nfsroot/mnt/etc/appweb,如下: 
[root@localhost appweb-src-2.4.2]# ls /opt/nfsroot/mnt/etc/appweb/
appweb.conf   mime.types    response.client  server.key       users.dist
openssl.ca    response.server  server.key.pem
groups.dist   openssl.conf  server.crt 我也不知道都需要哪些,就都放到这里了,有空可以试一下。     注意:原来配置成用Matrixssl时的那几个同名文件不能用,在没有复制上面几个openssl相关的文件时,打上地址提示找不到网页,换上相应文件就可以访问了。     另外默认情况下编译成DEBUG模式如果要用在产品中还要添加如下选项:--type=RELEASE
    意外收获:在linux box下我们可以用ldd查看哪个可执行文件链接了哪些库,但是在arm下没有相应的arm-linux-ldd命令,但你可以用下面的命令完成类似的功能:
======================================================= 1.openssl移植配置选项 ./config no-asm no-shared  --prefix=/https/  os/compiler:arm-hisiv100nptl-linux-gcc
2.编译错误解决
/******************************************************************************************************** The error is In function ‘SSL_CTX* InitServerCTX()’: serverssl.cpp:56:34: error: invalid conversion from ‘const SSL_METHOD* {aka const ssl_method_st*}’ to ‘SSL_METHOD* {aka ssl_method_st*}’ [-fpermissive] method = SSLv3_server_method(); /* create new server-method instance */
*********************************************************************************************************/
Use const SSL_METHOD *method; instead of SSL_METHOD *method;