当前位置: 首页 > 编程日记 > 正文

firefox+linux+nginx搭建server与client通过证书双向认证环境

  项目中需要搭建一个server和client基于证书的双向认证环境。由我来做,我也不会。

  经过一晚上的研究,基本摸清了(知其然不知其所以然)。做下笔记。

基本环境:

  1.安装nginx。

  2.安装openssl。

生成证书:

  首先建立一个工作目录,这里以我的工作目录为例。(/home/myca/),然后执行如下命令。建立生成证书的路径文件结构,这是由openssl的默认配置文件决定的。你可以修改配置。

mkdir demoCA
cd demoCA
touch ./{serial,index.txt}
echo '01'  > serial
mkdir ./newcerts
cd ..

 

  拷贝配置文件到工作目录。当然前缀路径要换成你自己的。

cp /usr/local/ssl/openssl.cnf   ./

  修改配置文件。编辑openssl.cnf中的一些选项。

  unique_subject  = no   (这样一个CA可以同时签多张证书)

  countryName = optional(把这些参数的匹配规则改为可选)

  stateOrProvinceName = optional

  organizationName  = optional

  organizationalUnitName  = optional

现在我们来生成自己的CA。

openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

生成会话会让你填入一些参数,红线标出的是要输入的,根据实际情况填写。执行完会发现工作目录下会有ca.crt  ca.key两个文件。截图如下:

  

  接下来生成server端证书。

  首先生成server端私钥。执行后会要求输入解析私钥文件的密码,根据个人喜好设置。生成server.key。

openssl genrsa -des3 -out server.key 1024

  生成证书请求。生成会话会提示输入一些请求信息,成功后生成server.csr。

openssl req -new -key server.key -out server.csr -config openssl.cnf

  注意紫色线条标出的一行,这行输入server端的域名(https://192.168.68.173:8080是我的服务器地址)。否则签发的证书会被浏览器视为不是本站点的证书。其他根据情况。

  

  现在用生成的CA给证书请求(server.csr)签发证书。根据提示输入相关密码(之前设置好的)和y(yes),成功后生成证书server.crt

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

  到这里,我们已经可以做单项认证了,来试试。

  配置nginx:vi /usr/local/nginx/conf/nginx.conf修改配置如下图(注意证书和CA的路径是我的工程路径):

  

  保存后启动nginx,会要求输入server端私钥文件解析密码,输入生成时设置的密码。

  在windows下打开firefox输入https://192.168.68.173:8080回车。

  

  这说明nginx已经向浏览器发送了自己的证书,但是这个证书不受信任。别急,现在我们把之前自己的CA导入浏览器。

  打开 选项->高级->查看证书->证书机构->导入。先择CA后根据提示导入证书。成功后如下:

  

  再次输入https://192.168.68.173:8080回车。

  

  看见中间那行提示了吗?中式英语翻译过来就是-->没有要求的ssl证书来发送。也就是说,client已经成功认证了server端的证书,但是我们配置nginx为双向认证,所以nginx要求浏览器出示证书,而浏览器没有证书。

  说明单项认证已经OK,现在为client生成证书。

  首先生成client端私钥,执行后会要求输入解析私钥文件的密码,根据个人喜好设置。生成client.key。

openssl genrsa -des3 -out client.key 1024

  生成证书请求。生成会话会提示输入一些请求信息,成功后生成client.csr。

openssl req -new -key client.key -out client.csr -config openssl.cnf

现在用之前生成的CA给证书请求(client.csr)签发证书。根据提示输入相关密码(之前设置好的)和y(yes),成功后生成证书client.crt

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

  firefox要求客户端的证书格式是p12格式,所以我们把client.crt转化为client.p12格式

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

转pem格式

cat ca.crt ca.key > ca.pem
cat server.crt server.key > server.pem
cat client.crt client.key > client.pem

最后一步,把client.p12导入浏览器。

  打开 选项->高级->查看证书->您的证书->导入。根据提示导入,导入成功后如图:

  

  输入https://192.168.68.173:8080回车。

  

   OK!!!

转载于:https://www.cnblogs.com/acool/p/4933325.html

相关文章:

编写高性能Java代码的最佳实践

编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。最后研究了JVM特定的调优技巧、数据库端的优化和架构方面的调整。以下是译文。 介绍 在这篇文章中&…

Exchange 2013 OWA搜索邮件失败问题处理

Exchange 2013 OWA搜索邮件失败问题处理问题:接到用户反馈,exchange 2013 owa搜索邮件失败,提示“您的搜索未返回任何结果“,如下图,但是outlook搜索正常。打开EMS命令行工具,get-mailboxdatabasecopystatu…

PAT_B_1027 打印沙漏

题目描述: 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印************ ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符…

3dmax2021入门学习教程

3dmax2021入门学习教程 MP4 | h264,1280x720 |语言:英语中文字幕(根据原英文字幕机译)原英文字幕 | 4h 23m | 3.55 GB 含课程素材工程文件 云桥网络 平台获取素材 你将学到什么 3DS MAX中的样条线和多边形建模 纹理、照明和渲…

关于HTML代码的转义

笔记: 1.在通过jsonp方式传输HTML代码的时候,为了防止代码中的一些字符影响json的语法,需要对HTML代码进行转义。 2.转义的时候可以只转义特殊字符(引号之类的),也可以把所有字符(中文&#xff…

php ajax替换数据,如何用ajax替换php函数

我是这里的 AJAX 新手。ajax的动作执行后如何替换初始的php函数?我发现执行操作后页面不会刷新。这是代码:javascriptfunction set_ddm(another_data) {var result $.ajax({url: ../display/ea_form_header.php,type: POST,data: {action: set_ddm,Data…

2022-2028年中国输送胶管行业市场全景调查及投资前景趋势报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国输送胶管行业市场行业相关概述、中国输送胶管行业市场行业运行环境、分析了中国输送胶管行…

CGIC简明教程(转摘)

CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库“CGIC”完成Web开发的各种要求。**************&#…

conflicts with existing, non-compatible bean definition of same name and class

Annotation-specified bean name xxxxxImpl for bean class [cn.abc.dao.service.xxxxxImpl] conflicts with existing, non-compatible bean definition of same name and class [cn.abc.dao.service.dev.xxxxxIImpl] 编译没问题,运行就报错了。 一查原来发现在dao…

Tree 使用方式

Traditional Ways of Tree Traversal This page contains examples of some “standard” traversal algorithms (ones that can be found in most textbooks). All examples perform pre-order tree traversal on a general rooted tree. “Algorithms, Data Structures and P…

网站更换服务器ip地教程,由于服务器更换IP地址,服务器不更换。需要如何操作使网站正常运行呢?,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...

多文件Files内容详情中(show.html) 模板中调用方法是:{loop $字段名 $i $c} 序号: {$i} 标题:{$c.title} 描述:{$c.description} 文件原始地址:{dr_get_file($c.file)} 文件的下载地址:{dr_down_file($c.file)} 图片缩…

3ds Max V-Ray5 完整指南大师班视频教程

3ds Max V-Ray5 完整指南大师班视频教程 时长15小时 包括项目文件 1920X1080 MP4 语言:英语中文字幕(机译) 标题:Gumroad–V-Ray 5 Masterclass:您的3ds Max V-Ray完整指南 大小:41.8G 共八大章 88小节课程 信息&am…

2022-2028年中国氢化丁晴橡胶行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国氢化丁晴橡胶电商行业市场行业相关概述、中国氢化丁晴橡胶电商行业市场行业运行环境、分析…

配置Exchange OWA和Sharepoint网站单点登录

配置Exchange OWA和Sharepoint网站单点登录如果我们在组织中已经部署完成了Lync、Exchange以及Sharepoint,那么我们会发现这三套系统在通过域账户登录计算机时,如果本机有安装Outlook和Lync,那么在登录Lync或启动Outlook的时候就会自动使用当…

BigTable

转载于:https://www.cnblogs.com/fanweisheng/p/11250529.html

Blender2.9全流程创建逼真未来科幻蝙蝠汽车视频教程

Blender2.9全流程创建逼真未来科幻蝙蝠汽车视频教程 MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2通道 含课程工程素材 体裁:在线学习|语言:英语中文字幕(根据原英文字幕机译更准…

微服务项目用了几台服务器,微服务部署运维

docker介绍,及作用就是类似VM虚拟机一样的虚拟容器技术。docker 可以帮我们把所需要的应用打包容器, 每一个容器都相互独立的,而且容器占用内存小,启动和管理的速度非常快。比如 之前我们使用linux 虚拟机,如果要用mys…

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端…

jQuery学习笔记一

2019独角兽企业重金招聘Python工程师标准>>> 1、使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,attr(属性名,属性值)格式则是设置元素属性名的值。 2、操作元…

关于60枚一分两分五分硬币凑成一块钱的解决方法

关于60枚一分两分五分硬币凑成一块钱的解决方法 一.强行三重for循环 #include<stdio.h> int main() {int a, b, c;for (a 1; a < 60; a){for (b 1; b < 60; b){for (c 1; c < 60; c){if (100 5 * c 2 * b a && 60 a b c){printf("%d %d…

hbase RPCServer源码分析

前置知识&#xff1a; java&#xff0c;nio&#xff0c;多线程 看了几天的源码&#xff0c;写一些自己心得&#xff0c;若有错误请指出。 RPCServer的作用&#xff1a;负责创建listener&#xff0c;reader&#xff0c;responser&#xff0c;handler来处理client端的请求。 RPCS…

Maya创建科幻3D动画循环场景视频教程

Maya创建科幻3D动画循环场景视频教程 Skillshare – Create a Sci-Fi 3D Animation Loop in Autodesk Maya 持续时间3h 27m 包括项目文件 1280X720 Mkv 语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕机译更准确&#xff09;原英文字幕 大小解压后 3.05G 共20小节课…

2022-2028年中国氢化丁腈橡胶行业市场深度分析及投资规模预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国氢化丁腈橡胶行业市场行业相关概述、中国氢化丁腈橡胶行业市场行业运行环境、分析了中国氢…

js中的json对象和字符串之间的转化

字符串转对象(strJSON代表json字符串) var obj eval(strJSON); var obj strJSON.parseJSON(); var obj JSON.parse(strJSON)&#xff1b; json对象转字符串(obj代表json对象) var str obj.toJSONString(); var str JSON.stringify(obj) 运用时候需要除了eval()以外需要jso…

三种方式实现分布式锁

通过以上过程你可以发现锁的获取是按照创建时间来的,谁先来争取锁谁就先获得锁,因此它实现的是公平锁。答案是不能,以Synchronized关键字为例,Synchronized关键字无论是在偏向锁、轻量级锁还是重量级锁状态都不能实现这点,如重量级锁,重量级锁是靠系统底层的互斥量Mutex实现的,也就是说每个节点(服务器)所使用的互斥量是分开的,节点A的互斥量是无法锁住节点B的线程访问临界区,因此Synchronized关键字只能保证单服务器内的JVM进程的不同线程同步,是不能用做分布式环境中来保证线程同步。

超级挂载 实现过程-代码

公司产品是给机顶盒或者电视做的&#xff0c;玩的就是大型游戏&#xff0c;一个游戏常常能有G级别的数据包&#xff0c;于是产生一个需求&#xff0c;将游戏的数据包存放在外置sdcard上&#xff0c;用户差一个32G的卡能随便玩游戏&#xff0c;不占用设备自身的存储容量&#xf…

synchronized对象锁与类锁用法&如何用synchronized锁字符串对象,这里面的坑要注意

我们使用synchronized通常都有这样一个误区:synchronized锁住的代码块一定是所有线程都互斥的。其实不然!首先我们明确一点,synchronized锁住的是一个对象!如果锁住的这个对象,在多个线程中相同,那么这些线程访问synchronized修饰的代码块时,总是互斥的。但是!如果锁住的这个对象,在多个线程中是不同的,那么这些线程访问synchronized修饰的代码块,是不会互斥的!

浅谈Java分布式与集群

在日常操作中,相信很多人在怎么理解Java分布式与集群问题上存在疑惑,今天就大概说说,不注意听,觉得两个可能是同一个东西,其实这个是两个概念。一句话概括:分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

550种Blender风格化笔刷素材

550种Blender风格化笔刷素材 550Blender刷风格化版(包括4K阿尔法) 大小解压后&#xff1a;3G 信息: 一个伟大的自定义风格化的刷子使用Blender收集。Alphas包含在其他软件中使用。 ArtStation – [MEGAPACK] 550 Blender Brushes Stylized Edition (4K Alphas Included) Bl…

synchronized用法详解

synchronized 是 Java 中的关键字,是一种同步锁。主要应用于多线程环境下保证线程的安全性。A. 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。B. 每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。C. 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。