webserver服务器+matrixssl搭建+openssl产生自签名证书

       最近给公司开发一个需要通过https登录的界面。搞了一个多月,从刚开始啥都不知道,到慢慢搞定了。期间看了很多文档,学了很多知识,现总结如下。

1、目的要求

      在设备上搭建一个web服务器,并且能以https的方式登录,而且设备能自己生成相关的证书文件。

2web服务器和ssl的搭建

      2.1源码下载

      公司原本是有web服务器的,但是不能支持matrixssl,这都是编译成静态库文件的,没法修改。没办法就只有自己再重新搭建服务器和matrixssl支持了。公司以前的代码是移植的goahead2.5的,现在都升级到3.3.6了,先到网上找到goahead2.5的代码。以及openssl的源代码,都是在官网去下载的。一定要找官网,官网才可靠。这里不多说,网上很多,一搜各个版本的都有下载。

      2.2移植步奏    

      先说goahead的移植。

       2.2.1、解压,我下载的是webs-2-5.tar.gz直接解压即可。

       2.2.2、进入目录。cd webs-2-5/  cdLINUX/

       2.2.3、修改MakefilevimMakefile 网上有很多教程说咋改,我就把我改的贴出来。


这是按照网上教程改成我的编译器的。


图中ARCH是按照我们移植需要,更改的静态库名字。


这部分是支持matrixssl的。我的matrixssl版本是matrixssl-3-1-3-open ,所以图中的Dir写的是matrixsslDir:=$(shell ls -d ../matrixssl-3-1*/)。注意下载的matrixssl-3-1-3-open文件夹要放到webs-2-5/目录下。不然编译器会找不到。

         Ok,基本上goahead就需要改这三部分。分别是修改交叉编译器;输出静态库名字;(其实也可以不用改,生成后修改也一样,这里为了方便);支持matrixssl。

         2.2.4、接下来就是修改matrixssl的Makefile了。

         进入目录cdmatrixssl-3-1-3-open/ 打开Makefile   vim Makefile


修改编译器。和刚才差不多。


修改库名字。

做完了这两步就算把所有的都设置好了。

         2.2.5、编译

先进入matrixssl目录,执行make clean   make

就能生成两个库文件,就是刚才我们设置的名字。到移植的时候会用到。


图中高亮部分就是库文件。

再进入cd webs-2-5/  cd LINUX/  一样执行 make clean   make


生成的库文件。

到这里,我们需要的库文件都生成好了。接下来到我们自己的工程中设置makefile 


lib下面添加

当然,我们得把这两个库文件拷贝到相应的库目录才行。

接下来,就把goahead和matrixssl的头文件包含到我们的工程里面,这样就可以调用goahead和matrixssl的函数搭建我们的带ssl的服务器了。这里要注意的是在编译库文件之前要对源码的定义做一些修改,不然移植过去可能无法使用。

2.3 源码修改

2.3.1 在wsIntrn.h文件中,修改如下:



这样就能读取比较大的HTML文档了。超过这个大小的文档就不能读取了。

         2.3.2在matrixssllib.h做如下修改:



2.3.3在websSSL.h中修改默认证书文件的位置。



刚开始测试的时候也可以用matrixssl原来带的pem格式的证书文件。



我这里是默认放在/usr/目录下的。把相关的证书文件放到相应目录,运行我们的程序,就可以使用http和https登录了。

3、证书文件的生成

         接下来说最难整的一部分了。Matrixssl要在服务器和浏览器间建立ssl通讯,就得在服务器有证书文件,这些网上也有很多教程的介绍。当然我们浏览器默认信任的证书颁发机构是固定的,我们的证书文件也可以拿给那些机构签名,不过是收费的。我们自己搭建的服务器就自己签名就是了,自己知道是可信任的就行了,虽然浏览器傻傻分不清楚。

         3.1 openssl应用程序移植到ARM处理器平台

由于我们的matrixssl是支持openssl产生的证书文件的,实际上好多种ssl移植都支持openssl的证书文件。但是我们的matrixssl移植是没有应用程序能在ARM平台上运行的,但是它也有自己的优点,就是小。关于openssl和matrixssl的区别问题,可以百度科普一下。步入正题。

         3.1.1下载源码

这里就不贴网址,百度—>官网—>随便下载。

         3.1.2配置安装

这步就有点棘手了,因为我们是移植到ARM平台,不是在虚拟机上运行,所以很多东西得自己配置为自己的东西。主要包括编译器,目录,以及修改Makefile。具体步骤写下来。

         a、复制到/usr 目录  # cpopenssl-1.0.1i.tar.gz /usr/

         b、解压                      # tar zxvf openssl-1.0.1i.tar.gz

         c、配置  推荐下面的配置方式

./config no-asm no-dso no-hw  --prefix=/https/  os/compiler:arm-hisiv100nptl-linux-gcc

因为我们移植到ARM平台,能不要的功能就不要,这样就能减少我们移植程序的大小。看网上很多教程,把配置写的麻烦死了,而且还不实用,多做无用功,还把人搞得一头雾水。其实上面这就是程序最小化,最简单的配置了。下面解释下这么配置的意思。

         no-asm  这句表示不使用汇编编译。

         no-dso  不调用其他静态库。

         no-hw  不添加其他硬件支持。为了减小应用程序大小。

         --prefix=/https/  openssl安装目录,我这里为了项目需要,特地安装在这个目录的。当然也可以自己随便改。

         os/compiler:arm-hisiv100nptl-linux-gcc  指定编译器。按照自己的编译器名称改。

在这里,为什么说网上的教程写的麻烦呢,因为对于配置的默认选项,很多都是我们不需要改的,而网上都说的配置很长一大串,其实没必要。

   no-ec_nistp_64_gcc_128 [default] OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir) no-gmp          [default]  OPENSSL_NO_GMP (skip dir)

   no-jpake        [experimental]OPENSSL_NO_JPAKE (skip dir)

   no-krb5         [krb5-flavor notspecified] OPENSSL_NO_KRB5

   no-md2          [default]  OPENSSL_NO_MD2 (skip dir)

   no-rc5          [default]  OPENSSL_NO_RC5 (skip dir)

   no-rfc3779      [default]  OPENSSL_NO_RFC3779 (skip dir)

   no-sctp         [default]  OPENSSL_NO_SCTP (skip dir)

   no-shared       [default]

   no-store        [experimental]OPENSSL_NO_STORE (skip dir)

   no-unit-test    [default]  OPENSSL_NO_UNIT_TEST (skip dir)

   no-zlib         [default]

   no-zlib-dynamic[default]

这就是什么都不配置时,config的默认配置,这可以看出来,网上很多人说的都在默认配置里面了,所以为了简单易懂,这些就不需要配置了。关于这些配置的意义,其实有一个很好的文档看,就在你的解压目录下有一个INSTALL文件,说的很详细,不过是英文的,但是英文不难,慢慢看就懂了,这是官方的文档,说的都很权威,尽量相信官方的文档。如果你实在不想看,可以百度这个:



这相当于翻译了那个官方文档。

         d、修改Makefile

配置完了我就看网上的教程修改Makefile了。这里把我修改的地方贴出来,也方便以后查找。按照文档的先后顺序。



这些就是按照我们的配置自己生成的。



这个地方,我改了CFLAG 后面加上了-O3选项,这样生成的应用程序就可以很小了。



按照网上说的,改成自己的平台。

后面就没什么改的了,大家如果修改后不行,按照我这个流程,再配合自己的实际情况,多试几次,不要气馁,多参考网上的教程,多做就能搞定的。

         好了,最麻烦的配置将完了,就是安装了。官方的安装步骤:

  $./config

  $make

  $make test

  $make install

我就没执行make test这步。直接配置了就  #make   #makeinstall

安装完就可以到你的配置目录下面找到安装的openssl了。



这里,我只是用那个小的应用程序,如果大家平台空间比较大,也可以移植openssl到你的应用程序里,就把lib目录下的静态库添加到你自己的程序的Makefile里就是了,当然文件还得复制到对应的地方。网上说还得注意链接库的顺序,这个我没做就无从说起了。

         3.2用openssl生成证书文件

其实这步也比较麻烦,因为不知道该怎么去生成,也没用一个官方的文档参考。网上大家说的都不怎么看的明白。最后我是按照一个教程生成的。网址如下:

http://blog.csdn.net/howeverpf/article/details/21622545然后我把自己的步骤贴出来,方便以后查看。

         3.2.1生成证书准备

首先配置openssl.cnf文件



dir   = /https/openssl这句是修改默认目录。其他都可以按照默认设置。关于这个的介绍,网上也有很多,我可能就没他们说的好了,先去看看,知道这些都是什么意思,就好改成自己的了。



这里改一句,default_md      = md5 好像有些版本不识别默认的,我之前那个版本就是不识别,这个版本就没试了,反正如果怕有问题,就把这个改了。

         接下来要在刚才设置的目录下创建两个文件:

         #touch index.txt  -----这个文件就为空就好。

         #touch serial    ------这个文件里面要写入序列号。

         #echo "01" ->serial  -----因为每一个证书文件都要序列号。

好了,上面就是准备工作。修改一个配置文档,创建两个文档。

         3.2.2生成证书命令

//默认指代cnf文件正确,不需要添加config/ 生成顶级CA的公钥证书和私钥文件,有效期10年(RSA 1024bits,默认)

openssl  req -new -x509 -days 3650 -keyout CARoot.key-out CARoot.crt -passout pass:abcd

// 为顶级CA的私钥文件去除保护口令

openssl  rsa -in CARoot.key -out CARoot.key -passinpass:abcd

//为应用证书/中级证书生成私钥文件

openssl  genrsa -out app.key 1024

//根据私钥文件,为应用证书/中级证书生成 csr 文件(证书请求文件)

openssl  req -new -key app.key -out app.csr

 // 使用CA的公私钥文件给 csr 文件签名,生成应用证书,有效期5年

Openssl ca -in app.csr -out app.crt -certCARoot.crt -keyfile CARoot.key -days 1826 -policy policy_anything –batch

 

到此,证书文件生成成功了,把这些证书文件放到webserver的默认目录下,开启ssl,就可以在服务器使用自己的证书文件了。可以用浏览器登录https看看自己的证书文件。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值