本文主要介绍使用libevhtp搭建一个HTTPS SERVER的方法,非加密的HTTP SERVER搭建方法,请点击此处 (本文的构建环境继承自该博客)。

本文将针对“双向验证身份”场景,介绍HTTPS SERVER的搭建方法。“单向验证身份”的场景,请点击此处。

1. 双向验证身份

有的时候,客户端通过输入账号和密码向服务器端展示自己的身份的方式太过繁琐,尤其是在客户端并不是一个人、而只是一个程序的时候。这种情况下,我们希望客户端与服务端双方都利用一个身份证(certificate)通过SSL/TLS协议向对方展示自己的身份。

根据单向身份验证的方法,如果让通信双方互相交换身份证,就可以实现互相验证了,但是如果一个分布式系统里有多方都需要进行通信, 如果任意两方都要交换身份证的话就太麻烦了。所以,我们通常创建一个自签署的根身份证(root CA),然后用它来签署分布式系统中各方的身份证,这样每一方都只要有这个根身份证,即可验证所有其他的通信方了。

我们可以通过以下步骤搭建双向验证身份的HTTPS SERVER。在本文中,我们将使用一个CA来签署HTTPS服务器的身份证。

1.1 创建CA

1. 创建我们自己CA的秘钥对(RSA)文件:

openssl genrsa -out "ca-key.pem" 2048

2. 创建我们自己CA的身份证申请(CSR)文件,并且用CA自己的私钥自签署该CSR,得到CA的身份证:

openssl req -x509 -new -key ca-key.pem -days 365 -out ca-crt.pem -subj "/CN=we-as-ca"

通过上述步骤,我们可以得到了自己CA的秘钥对文件和证书文件。

1.2 使用CA签署服务器的证书文件

1. 生成服务器的秘钥对(RSA)文件:

openssl genrsa -out server-key.pem 2048

2. 生成服务器的身份证申请(CSR)文件:

openssl req -new -key server-key.pem -out server-csr.pem -subj "/CN=192.168.213.133"  

3. 使用前面生成的CA签署服务器的证书(CRT)文件:

openssl x509 -req -in server-csr.pem -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out server-crt.pem -days 365

经过上述步骤,我们得到了HTTPS服务器的秘钥文件server-key.pem和经过CA签署的服务器证书文件server-crt.pem。

说明:上述步骤中的参数需要根据实际情况进行调整。

1.3 使用CA签署客户端的证书文件

1. 生成客户端的秘钥对(RSA)文件:

openssl genrsa -out client-key.pem 2048

2. 生成客户端的身份证申请(CSR)文件:

openssl req -new -key client-key.pem -out client-csr.pem -subj "/CN=192.168.213.129" 

3. 使用前面生成的CA签署客户端的证书(CRT)文件:

openssl x509 -req -in client-csr.pem -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out client-crt.pem -days 365

经过上述步骤,我们得到了连接HTTPS服务器的客户端的秘钥文件client-key.pem和经过CA签署的客户端证书文件client-crt.pem。

说明:上述步骤中的参数需要根据实际情况进行调整。

1.4 调用libevhtp接口,构建HTTPS服务器

本文的HTTPS服务器代码及程序使用“单向验证身份”场景的内容,请前往该文章查看。

1.5 测试HTTPS服务器

打开一个终端,运行生成的HTTPS服务器程序,如下:

./https_server -cert cassl/server-crt.pem -key cassl/server-key.pem -ca cassl/ca-crt.pem -verify-peer -verify-depth 2 -enforce-peer-cert

在上述命令中,我们通过指定相关参数(-verify-peer),要求服务器对客户端进行认证,即实现双向认证场景。

在客户端机器上,打开一个终端,使用curl命令测试HTTPS服务器,如下:

curl https://192.168.213.133:4443/ -k --key cassl/client-key.pem --cert cassl/client-crt.pem

上面的curl命令的执行结果如下:

如果客户端的终端中出现上述信息,说明双向身份验证的HTTPS服务器部署成功了。

说明:curl的-k选项会允许curl执行不安全的SSL连接和数据传输,使用-k选项时,客户端将不再检查“签署https server身份证的CA身份证”。所以,前面的curl测试命令也可以换成如下命令:

curl https://192.168.213.133:4443/  --cert cassl/client-crt.pem --key cassl/client-key.pem --cacert cassl/ca-crt.pem

上述的curl命令中添加了“--cacert”选项,去掉了“-k”选项。该命令的执行结果如下:

客户端的终端中出现了上述信息,说明双向身份验证的HTTPS服务器部署成功了。

使用libevhtp搭建HTTPS SERVER(双向验证身份)相关推荐

  1. 使用HttpClient连接池进行https单双向验证

    https单双向验证环境的搭建参见:http://www.cnblogs.com/YDDMAX/p/5368404.html 一.单向握手 示例程序: package com.ydd.study.he ...

  2. QT充当客户端模拟浏览器等第三方客户端对https进行双向验证

    在 ssl单向证书和双向证书校验测试及搭建流程 文章中,已经做了基于https的单向认证和双向认证,,, 在进行双向认证时,采用的是curl工具或浏览器充当客户端去验证. 此次采用QT提供的接口去开发 ...

  3. android搭建https,android 搭建https Server(示例代码)

    在android上采用http协议的服务器,需求有点奇葩,非要用https更是醉了.这里只要求单向https认证,不要双向认证. 本文采用的开源框架Nanohttpd( https://github. ...

  4. 使用nodejs搭建HTTPS server

    From 我的简书 第一步:创建一个项目目录,npm init初始化项目后,安装express. npm install express --save 第二步:新建http.js文件,初始代码如下. ...

  5. iOS开发-https免证书验证

    此处博主做一个声明,如果你想跳过https的双向验证,仅仅单向进行直接信任所有的证书,那么你们的后台也必须是允许单向验证的,否则设置了双向验证,客户端是无法跳过的,实在不想当初辛苦的经验被无知的小白说 ...

  6. Java nginx 双向ssl_使用Nginx实现HTTPS双向验证的方法

    https单向验证应用广泛想必大家都很熟悉,我已经在一篇博文中分享过,这次来看看Nginx如何实现双向验证. 单向验证与双向验证的区别: 单向验证: 指客户端验证服务器端证书,服务器并不需要验证客户端 ...

  7. HTTPS实战之单向验证和双向验证

    转载自:https://mp.weixin.qq.com/s/UiGEzXoCn3F66NRz_T9crA 原创: 涛哥 coding涛 6月9日 作者对https 解释的入目三分啊 (全文太长,太懒 ...

  8. iOS https 自制证书 单向 双向 验证,以及服务器(Nginx)配置

    一.http和https的区别与原理 介绍原理的博文太多了,这里列出一篇详细的: IOS 使用自签名证书开发HTTPS文件传输 二.证书的类型和自制证书生成 1.什么是数字证书(Certificate ...

  9. HTTPS的SSL单向验证和双向验证

    HTTPS的SSL单向验证和双向验证 ​ HTTPs利用SSL/TLS建立安全信道,加密数据包,主要目的是提供对网站服务器的身份认证,同时保护交换数据的安全性与完整性 SSL/TLS ​ TLS在传输 ...

  10. 怎样更改SQL Server 2008的身份验证方式

    大家都知道sql server 有两种登录验证方式,即sql server验证方式和windows验证方式,但是sql server默认的是windows登录验证方式,我们如何启用sql server ...

最新文章

  1. 结构体中定义函数指针
  2. 11g新特性:X$DBGALERTEXT一个很酷的内部视图
  3. python实现快排算法(quicksort)
  4. 2018-北航-面向对象-前三次OO作业分析与小结
  5. Qt5.2 for Android 配置及部署到手机运行
  6. SE81 - Application hierarchy CSS component tree
  7. ImageView显示控制
  8. 拓端tecdat|R语言Copula的贝叶斯非参数估计
  9. IntelliJ IDEA下SVN的配置及使用说明
  10. 目前计算机无法显示的四叠字,四叠字大全列表
  11. 2020年阿里巴巴校招面试题及答案持续更新中~~~
  12. [软件测试] - No.1 Fault Error Failure 区别
  13. linux中使用U盘拷贝
  14. POJ 1273 Dinic
  15. python小案例程序安徽工程大学专用百词斩(刚接触python不喜勿喷)
  16. ffmpeg AV转换常用命令
  17. 关于DBA的一些学习(一)
  18. 基于智能和视觉的火灾检测系统:调查 (论文翻译)
  19. 用C语言写的学生管理系统,C语言实现简单的学生成绩管理系统
  20. 专业的地形分析处理软件SAGA(附安装包下载)

热门文章

  1. 省赛模拟一 又一道简单题
  2. Hadoop基础教程》之初识Hadoop【转】
  3. server 2008 R2+IIS7.5安装cacti实验
  4. 狐智、狼道、鹰谋,教你做个聪明的生存者!
  5. CentOS 6.2安装配置pacemaker
  6. 无连续整数的子集数问题
  7. 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器...
  8. STM32定义数组到flash的指定位置
  9. 离线电脑搭建开发环境
  10. Ignoring Provides line with DepCompareOp for package gdb-minimal