OpenSSL与公钥私钥证书签名的千丝万缕
导语
人对任何事物的认识都是阶段性的,从无知到知晓,从懵懂到半知半解,从误解到将信将疑,从晕头转向到下定决心吃透。
介绍
OpenSSL是一个强大的命令行工具,它可以用来处理许多种跟PKI(Public Key Infrastructure)即:公钥基础建设、HTTPS(HTTP以及TLS)等相关的技术。这篇提纲挈领式的随笔文章可以提供快速的OpenSSL相关技术的命令咨询,这对于IT软件开发技术人员的日常工作来说非常的有必要。
这里主要包含了OpenSSL的一些例子,有:如何生成私钥(private key)、CSR(certificate signing requests)、如何生成证书(certificate)、以及如何对他们进行格式转换,这里当然只是一部分OpenSSL的最常用法了...
如何使用本文
- 如果你不熟悉CSR,证书签名请求(certificate signing request),那么请从正文第一部分开始阅读
- 除去第一部分,本文将会类似于命令行文档的形式进行介绍
- 当你非常熟悉了解这些OpenSSL的基本技术知识之后,你可以随时随地直接查看你想要查看的正文部分,以备不时之需
什么是Certificate Signing Requests (CSRs)
如果你想获得一个经过certificate authority (CA)认证的SSL certificate,那么你必须首先生成或者持有一个certificate singning request(CSR证书签名请求,下文我将不再赘述中文)。一个CSR主要由一对公钥私钥中的public key、以及一些额外信息构成。
注意:CSR是由public key和一些类似公司明、国家、地区、省市的信息,两者构成,其中公钥还对应一个私钥,也就是说CSR的产生必须依赖一对公钥私钥。
任何时候你生成一个CSR,都会被提示并要求提供一些关于证书的信息,这些信息是公开的就像你的工牌一样作为你的唯一DN(Distinguised Name,识别名)。这些信息里面一个最重要的信息就是Comman Name(CN),这个信息是用来非常准确地描述该CSR所要产生的certificate的证书发布方的信息,这个信息全程Fully Qualified Domain Name(FQDN),通俗点解释:有一个https的服务器我假设它是大学,有一个CSR我把它比作学校教务处的章子,有个certificate我把它比作软件工程专业的毕业证书,章子上面有学校的最权威的信息,那么就很清楚了。对吧?
继续,当使用命令行生成CSR的时候会有FQDN的IO交互输入过程,当然你通过一路回车可以跳过这些输入的步骤从而生成一个全是空格信息的CSR。
另外,还有一条FQDN中比较中要的DN是关于提供你的公司信息、或者组织信息,如果你正在为你的老板开发一款应用或者产品并且被要求使用SSL证书认证机制,那么你就不能一路回车的方式生成CSR了,什么是组织信息?给举个例子:
---
Country Name ( letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:Brooklyn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company
Organizational Unit Name (eg, section) []:Technology Division
Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com
Email Address []:
如果你不像一个接着一个在控制台回答OpenSSL的csr生成输入交互,那么就使用下面一段代码一笔带过:
-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"
现在,你应该灰常明白CSR是什么了吧?如果还不太明白再回头看一边
如何生成CSR
前面说了,CSR里面包含了一个公钥、和QFDN,因此首先你得有一个公钥,如果没有你就要生成一个,但实际上公钥是由私钥生成的,可以这么理解:公钥是露在外头的萝卜茎叶、私钥是埋在土里的萝卜,要拿到公钥肯定得有萝卜啊⊙﹏⊙、
生成一个Private Key(私钥)和对应的CSR
如果你想使用HTTPS(HTTP之上的TLS)来加密您的Apache HTTP或者Nginx web server,并且你希望使用Certificate Authority (CA) 技术来处理SSL certificate证书,那么就可以使用以下方式产生CSR。这些通过此种方式产生的CSR可以被发送到一个CA机制里,用来请求通过CA认证并获得一个CA-signed SSL certificate(CA 认证的签名文件),如果你的CA机制支持SHA-2话增加-sha256这个选项参数到下面的命令行,这个参数项可以用SHA-2算法给你要生成的CSR进行签名。
下面的命令行生成一个2048-bit的private key(domain.key)以及一个CSR(domain.csr):
openssl req \
-newkey rsa: -nodes -keyout domain.key \
-out domain.csr
紧接着通过控制台的交互来输入你的QFDN信息,然后直至完成
注意:-newkey rsa:2048 这个参数项是用来指定这个这个private key生成的是2048-bit的结果,并且使用RSA算法。-nodes 这个参数项是用来指定private key不需要使用密码加固。
用已有的private key(私钥)来生成CSR
使用下面的方式来生成一个CSR,这个命令使用一个已存在的private key (domain.key
)生成一个CSR(domain.csr
):
openssl req \
-key domain.key \
-new -out domain.csr
回答控制台的交互输入直到完成CSR生成。
注意:-key 这个参数项是用来指定一个已存在的private key的位置。-out
这个指示csr文件产生的位置及名称
用已存在的证书和私钥生成CSR
你必须清楚的是:CSR是证书发布方使用私钥+QFDNCSR产生的,CSR文件的内容由公钥+QFDN构成,证书是由CSR经过签名后颁发给证书持有方的。因此,通过一系列的算法是可以从证书里使用私钥算出CSR来,这就像是学校教务处收回了你的毕业证书抠掉你的照片和其他信息还原回来就是CSR了,CSR就等于是一个证书空壳子。
使用下面命令来创建一个新的CSR(domain.csr),当然它是基于已存在的certificate(domain.crt)以及你的private key(domain.key):
openssl x509 \
-in domain.crt \
-signkey domain.key \
-x509toreq -out domain.csr
参数项 -x509toreq 用来表示使用一个X509类型的证书格式产生CSR。
生成一个SSL证书
如果你不想产生一个需要CA认证的证书,那么你就必须自己给这个证书签名,啊啊啊?什么意思?说形象点,你犯校规被拒绝颁发毕业证书,为了蒙骗你爹妈你自己给自己盖了个冒牌的章子,就这么理解。
一个可以正确被你自己识别证书当然可以是你自己签名的证书,这就等于你自己造了个冒牌毕业证书,你当然自己得首先相信它是个ok的证书咯,我们为这样的证书起名self-signed certificate(自签名证书)。self-signed certificate可以用来给你的数据加密,它的效果跟使用CA-signed的效果是一样的,不过当你把这样的证书加密的数据放到浏览器或者其他终端的时候会产生warning,最常见的就是在chrome浏览器力弹出提示说该站点不安全什么什么的,因为它未经过不再CA-signed列表里,如果你想让别的用户正常浏览有两种途径,一个是把证书颁发给用户并让用户导入该证书到浏览器或者其他终端应用,第二个就是交给CA授权认证(个人和小公司就算了吧)
下面这个章节主要讲述 self-signed certificates的细节
生成一个 self-signed certificates(自签名的证书)
使用下面的方式来生成一个自签名的证书,如果你将准备使用它来加密你的Apache HTTP 或者 Nginx web server,并且你确定你不需要使用CA认证的certificate。
下面的命令用来生成一个2048-bit的private key(domain.key)以及 self-signed certificate (domain.crt
) :
openssl req \
-newkey rsa: -nodes -keyout domain.key \
-x509 -days -out domain.crt
回答控制台CSR的相关信息直到CSR生成完毕。
参数项 -x509 告诉req子命令创建一个自签名的证书,-days 365 这个参数项用来指定证书的有效时间为从现在开始的365天之后,一个中间临时产生的CSR文件将会连同上述信息一并出现,当然这很正常。
使用一个已存在的私钥生成一个self-signed certificate(自签名证书)
使用下面的方式生成一个自签名证书,当然前提是你已经拥有一个私钥。
使用下面的命令基于private key (domain.key
)产生一个self-signed certificate (domain.crt
) :
openssl req \
-key domain.key \
-new \
-x509 -days -out domain.crt
回答控制台CSR的相关信息直到CSR生成完毕。
参数项 -x509 告诉req子命令创建一个自签名的证书,-days 365 这个参数项用来指定证书的有效时间为从现在开始的365天之后,-new 用来激活CSR 信息询问交互
使用已存在的私钥和CSR来生成self-signed certificate(自签名证书)
使用这种方式的前提是你拥有了一个自己的private ke 以及对应的 CSR,并且你想通过它们生成一个自签名证书。
下面的命令行基于一个private key (domain.key
) 和对应的domain.csr创建一个elf-signed certificate (domain.crt
):
openssl x509 \
-signkey domain.key \
-in domain.csr \
-req -days -out domain.crt
待续未完
---恢复内容结束---
导语
人对任何事物的认识都是阶段性的,从无知到知晓,从懵懂到半知半解,从误解到将信将疑,从晕头转向到下定决心吃透。
介绍
OpenSSL是一个强大的命令行工具,它可以用来处理许多种跟PKI(Public Key Infrastructure)即:公钥基础建设、HTTPS(HTTP以及TLS)等相关的技术。这篇提纲挈领式的随笔文章可以提供快速的OpenSSL相关技术的命令咨询,这对于IT软件开发技术人员的日常工作来说非常的有必要。
这里主要包含了OpenSSL的一些例子,有:如何生成私钥(private key)、CSR(certificate signing requests)、如何生成证书(certificate)、以及如何对他们进行格式转换,这里当然只是一部分OpenSSL的最常用法了...
如何使用本文
- 如果你不熟悉CSR,证书签名请求(certificate signing request),那么请从正文第一部分开始阅读
- 除去第一部分,本文将会类似于命令行文档的形式进行介绍
- 当你非常熟悉了解这些OpenSSL的基本技术知识之后,你可以随时随地直接查看你想要查看的正文部分,以备不时之需
什么是Certificate Signing Requests (CSRs)
如果你想获得一个经过certificate authority (CA)认证的SSL certificate,那么你必须首先生成或者持有一个certificate singning request(CSR证书签名请求,下文我将不再赘述中文)。一个CSR主要由一对公钥私钥中的public key、以及一些额外信息构成。
注意:CSR是由public key和一些类似公司明、国家、地区、省市的信息,两者构成,其中公钥还对应一个私钥,也就是说CSR的产生必须依赖一对公钥私钥。
任何时候你生成一个CSR,都会被提示并要求提供一些关于证书的信息,这些信息是公开的就像你的工牌一样作为你的唯一DN(Distinguised Name,识别名)。这些信息里面一个最重要的信息就是Comman Name(CN),这个信息是用来非常准确地描述该CSR所要产生的certificate的证书发布方的信息,这个信息全程Fully Qualified Domain Name(FQDN),通俗点解释:有一个https的服务器我假设它是大学,有一个CSR我把它比作学校教务处的章子,有个certificate我把它比作软件工程专业的毕业证书,章子上面有学校的最权威的信息,那么就很清楚了。对吧?
继续,当使用命令行生成CSR的时候会有FQDN的IO交互输入过程,当然你通过一路回车可以跳过这些输入的步骤从而生成一个全是空格信息的CSR。
另外,还有一条FQDN中比较中要的DN是关于提供你的公司信息、或者组织信息,如果你正在为你的老板开发一款应用或者产品并且被要求使用SSL证书认证机制,那么你就不能一路回车的方式生成CSR了,什么是组织信息?给举个例子:
---
Country Name ( letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:Brooklyn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company
Organizational Unit Name (eg, section) []:Technology Division
Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com
Email Address []:
如果你不像一个接着一个在控制台回答OpenSSL的csr生成输入交互,那么就使用下面一段代码一笔带过:
-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"
现在,你应该灰常明白CSR是什么了吧?如果还不太明白再回头看一边
如何生成CSR
前面说了,CSR里面包含了一个公钥、和QFDN,因此首先你得有一个公钥,如果没有你就要生成一个,但实际上公钥是由私钥生成的,可以这么理解:公钥是露在外头的萝卜茎叶、私钥是埋在土里的萝卜,要拿到公钥肯定得有萝卜啊⊙﹏⊙、
生成一个Private Key(私钥)和对应的CSR
如果你想使用HTTPS(HTTP之上的TLS)来加密您的Apache HTTP或者Nginx web server,并且你希望使用Certificate Authority (CA) 技术来处理SSL certificate证书,那么就可以使用以下方式产生CSR。这些通过此种方式产生的CSR可以被发送到一个CA机制里,用来请求通过CA认证并获得一个CA-signed SSL certificate(CA 认证的签名文件),如果你的CA机制支持SHA-2话增加-sha256这个选项参数到下面的命令行,这个参数项可以用SHA-2算法给你要生成的CSR进行签名。
下面的命令行生成一个2048-bit的private key(domain.key)以及一个CSR(domain.csr):
openssl req \
-newkey rsa: -nodes -keyout domain.key \
-out domain.csr
紧接着通过控制台的交互来输入你的QFDN信息,然后直至完成
注意:-newkey rsa:2048 这个参数项是用来指定这个这个private key生成的是2048-bit的结果,并且使用RSA算法。-nodes 这个参数项是用来指定private key不需要使用密码加固。
用已有的private key(私钥)来生成CSR
使用下面的方式来生成一个CSR,这个命令使用一个已存在的private key (domain.key
)生成一个CSR(domain.csr
):
openssl req \
-key domain.key \
-new -out domain.csr
回答控制台的交互输入直到完成CSR生成。
注意:-key 这个参数项是用来指定一个已存在的private key的位置。-out
这个指示csr文件产生的位置及名称
用已存在的证书和私钥生成CSR
你必须清楚的是:CSR是证书发布方使用私钥+QFDNCSR产生的,CSR文件的内容由公钥+QFDN构成,证书是由CSR经过签名后颁发给证书持有方的。因此,通过一系列的算法是可以从证书里使用私钥算出CSR来,这就像是学校教务处收回了你的毕业证书抠掉你的照片和其他信息还原回来就是CSR了,CSR就等于是一个证书空壳子。
使用下面命令来创建一个新的CSR(domain.csr),当然它是基于已存在的certificate(domain.crt)以及你的private key(domain.key):
openssl x509 \
-in domain.crt \
-signkey domain.key \
-x509toreq -out domain.csr
参数项 -x509toreq 用来表示使用一个X509类型的证书格式产生CSR。
生成一个SSL证书
如果你不想产生一个需要CA认证的证书,那么你就必须自己给这个证书签名,啊啊啊?什么意思?说形象点,你犯校规被拒绝颁发毕业证书,为了蒙骗你爹妈你自己给自己盖了个冒牌的章子,就这么理解。
一个可以正确被你自己识别证书当然可以是你自己签名的证书,这就等于你自己造了个冒牌毕业证书,你当然自己得首先相信它是个ok的证书咯,我们为这样的证书起名self-signed certificate(自签名证书)。self-signed certificate可以用来给你的数据加密,它的效果跟使用CA-signed的效果是一样的,不过当你把这样的证书加密的数据放到浏览器或者其他终端的时候会产生warning,最常见的就是在chrome浏览器力弹出提示说该站点不安全什么什么的,因为它未经过不再CA-signed列表里,如果你想让别的用户正常浏览有两种途径,一个是把证书颁发给用户并让用户导入该证书到浏览器或者其他终端应用,第二个就是交给CA授权认证(个人和小公司就算了吧)
下面这个章节主要讲述 self-signed certificates的细节
生成一个 self-signed certificates(自签名的证书)
使用下面的方式来生成一个自签名的证书,如果你将准备使用它来加密你的Apache HTTP 或者 Nginx web server,并且你确定你不需要使用CA认证的certificate。
下面的命令用来生成一个2048-bit的private key(domain.key)以及 self-signed certificate (domain.crt
) :
openssl req \
-newkey rsa: -nodes -keyout domain.key \
-x509 -days -out domain.crt
回答控制台CSR的相关信息直到CSR生成完毕。
参数项 -x509 告诉req子命令创建一个自签名的证书,-days 365 这个参数项用来指定证书的有效时间为从现在开始的365天之后,一个中间临时产生的CSR文件将会连同上述信息一并出现,当然这很正常。
使用一个已存在的私钥生成一个self-signed certificate(自签名证书)
使用下面的方式生成一个自签名证书,当然前提是你已经拥有一个私钥。
使用下面的命令基于private key (domain.key
)产生一个self-signed certificate (domain.crt
) :
openssl req \
-key domain.key \
-new \
-x509 -days -out domain.crt
回答控制台CSR的相关信息直到CSR生成完毕。
参数项 -x509 告诉req子命令创建一个自签名的证书,-days 365 这个参数项用来指定证书的有效时间为从现在开始的365天之后,-new 用来激活CSR 信息询问交互
使用已存在的私钥和CSR来生成self-signed certificate(自签名证书)
使用这种方式的前提是你拥有了一个自己的private ke 以及对应的 CSR,并且你想通过它们生成一个自签名证书。
下面的命令行基于一个private key (domain.key
) 和对应的domain.csr创建一个elf-signed certificate (domain.crt
):
openssl x509 \
-signkey domain.key \
-in domain.csr \
-req -days -out domain.crt
待续未完
OpenSSL与公钥私钥证书签名的千丝万缕的更多相关文章
- .net core中使用openssl的公钥私钥进行加解密
这篇博文分享的是 C#中使用OpenSSL的公钥加密/私钥解密 一文中的解决方法在 .net core 中的改进.之前的博文针对的是 .NET Framework ,加解密用的是 RSACryptoS ...
- OpenSSL生成公钥私钥***
证书标准 X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准. 编码格式 同样的X.509证书,可能有不同的编码格式,目前有 ...
- OpenSSL 下载和私钥证书、CERTIFICATE证书生成
openssl 是生成私钥和公钥证书的重要工具. Windows如何安装OpenSSL: 官网:https://www.openssl.org/community/mailinglists.html ...
- Java中使用OpenSSL生成公钥私钥进行数据加解密
当前使用的是Linux系统,已经安装OpenSSL软件包. 一.使用OpenSSL来生成私钥和公钥1.执行命令openssl version -a 验证机器上已经安装openssl $ openssl ...
- C# 中使用 OpenSSL 的公钥/私钥进行加密和解密
在C#中进行RSA解密,需要用RSACryptoServiceProvider,但是不支持OpenSSL格式的公钥或者私钥. X509 公钥 -----BEGIN PUBLIC KEY----- MI ...
- 支付宝开放平台 配置RSA(SHA1)密钥 OpenSSL配置公钥私钥对
进入到第一次配置支付宝支付服务了 配置支付宝服务,需要去支付宝的开放平台申请服务 需要设置一些参数 其中需要在后台设置配置RSA(SHA1)密钥(公钥(注意这个子读"yao")) ...
- openssl生成公钥私钥对 加解密
在计算机软件开发世界中,编程语言种类极多,数据在各种语言的表现形式可能有所差异,但数据本身的处理可能,或者说本质上是完全一样的:比如数据在某个算法中的运算过程是一样的.在这里,我以加密与解密来作为例子 ...
- PHP Openssl 生成公钥私钥
<?php //配置信息 $dn = array( "countryName" => "GB", "stateOrProvinceName ...
- 用 openSSL 生成 公钥 私钥
支付宝app接口需要 RSA加密通讯 https://doc.open.alipay.com/doc2/detail?treeId=58&articleId=103242&docTyp ...
随机推荐
- 学习CSS一些事(下)
2.浮动(float) 浮动(float)特点:1.元素会左移.右移,直到触碰到容器为止. 2.设置浮动元素,仍旧处于标准文档流. 3.当元素没有设置宽度值,而设置了浮动属性,元素的宽度随着内容 ...
- 自签名SSL生成
本教程以AppServ生成自签名证书为例,同时配置OpenSSL环境1.生成自签名证书,控制台程序进入Apache目录下的bin目录 >openssl req -config ../conf/o ...
- 推送:腾迅信鸽 VS Bmob
最近几天了解市场上主流的推送SDK. 腾迅信鸽 所需SDK,去官网自行下载.去下载 完整的清单文件如下: <?xml version="1.0" encoding=" ...
- 集成支付宝后出现LaunchServices: ERROR: There is no registered handler for URL scheme alipay
原因如下: There's no problem with your implementation. All those warnings mean is the apps which each UR ...
- MySQL UPDATE
MySQL UPDATE 查询 如果我们需要修改或更新MySQL中的数据,我们可以使用 SQL UPDATE 命令来操作.. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用SQL语 ...
- AMD和CMD的区别
1.cmd define(function(require,export){ var b = 1; var a = require('./a'); a.dosomething(); }); 2.amd ...
- select、pselect、poll和epoll的区别
select.pselect.poll和epoll函数是unix中具有I/O复用的函数.什么是I/O复用?为什么要有I/O复用?以及在什么场合下使用I/O复用?既然都具有I/O复用的功能,那这几个函数 ...
- CentOS 6.5下安装MySql 5.7
不管您按下面的方法安装成功否,请留个言,把您遇到的问题写上共勉! 包下载http://url.cn/WrNg5S 环境: 1).软硬件:E6420双核CPU,8G内存,1T硬盘 2).虚拟机下 Cen ...
- eval("表达式")
eval就是把字符串转成可执行代码eval("表达式");表达式被翻译成JavaScript代码执行比如eval("alert('test')");等于aler ...
- SpEL快速入门
Spring表达式语言(简称SpEL)是一种鱼JSP2 EL功能类似的变道时语言,它可以在运行时查询和操作对象图.与JSP 2的EL相比,SpEL功能更加强大,它甚至支持方法的调用和基本字符串模板. ...