导语

人对任何事物的认识都是阶段性的,从无知到知晓,从懵懂到半知半解,从误解到将信将疑,从晕头转向到下定决心吃透。

介绍

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与公钥私钥证书签名的千丝万缕的更多相关文章

  1. .net core中使用openssl的公钥私钥进行加解密

    这篇博文分享的是 C#中使用OpenSSL的公钥加密/私钥解密 一文中的解决方法在 .net core 中的改进.之前的博文针对的是 .NET Framework ,加解密用的是 RSACryptoS ...

  2. OpenSSL生成公钥私钥***

    证书标准 X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准. 编码格式 同样的X.509证书,可能有不同的编码格式,目前有 ...

  3. OpenSSL 下载和私钥证书、CERTIFICATE证书生成

    openssl 是生成私钥和公钥证书的重要工具. Windows如何安装OpenSSL: 官网:https://www.openssl.org/community/mailinglists.html  ...

  4. Java中使用OpenSSL生成公钥私钥进行数据加解密

    当前使用的是Linux系统,已经安装OpenSSL软件包. 一.使用OpenSSL来生成私钥和公钥1.执行命令openssl version -a 验证机器上已经安装openssl $ openssl ...

  5. C# 中使用 OpenSSL 的公钥/私钥进行加密和解密

    在C#中进行RSA解密,需要用RSACryptoServiceProvider,但是不支持OpenSSL格式的公钥或者私钥. X509 公钥 -----BEGIN PUBLIC KEY----- MI ...

  6. 支付宝开放平台 配置RSA(SHA1)密钥 OpenSSL配置公钥私钥对

    进入到第一次配置支付宝支付服务了 配置支付宝服务,需要去支付宝的开放平台申请服务 需要设置一些参数 其中需要在后台设置配置RSA(SHA1)密钥(公钥(注意这个子读"yao")) ...

  7. openssl生成公钥私钥对 加解密

    在计算机软件开发世界中,编程语言种类极多,数据在各种语言的表现形式可能有所差异,但数据本身的处理可能,或者说本质上是完全一样的:比如数据在某个算法中的运算过程是一样的.在这里,我以加密与解密来作为例子 ...

  8. PHP Openssl 生成公钥私钥

    <?php //配置信息 $dn = array( "countryName" => "GB", "stateOrProvinceName ...

  9. 用 openSSL 生成 公钥 私钥

    支付宝app接口需要 RSA加密通讯 https://doc.open.alipay.com/doc2/detail?treeId=58&articleId=103242&docTyp ...

随机推荐

  1. 11、SQL Server 视图、数据库快照

    SQL Server 视图 什么是视图? 视图是一个虚拟的表,内容源于查询的结果集.只有当视图上建立了索引后,才会具体化. 视图可以筛选和处理数据,而不是直接访问基础表.如:创建一个视图,只展示源表中 ...

  2. ajax请求aspx页面

    首先,这么用是不好的.最好用ashx,但也难免遇到这种需求.开发过这么一个系统,每天访问量最多100,web服务器压力很小,完全大马拉小车,主要压力都在数据库服务器上,要做大量的统计.所以页面直接全上 ...

  3. Dedecms当前位置{dede:field name='position'/}修改

    这个实在list_article.htm模板出现的,而这个模板通过loadtemplage等等一系列操作是调用的include 下的arc.archives.class.php $this->F ...

  4. Android VideoView

    这两天公司要让做一个播放视频的小Demo,于是网上学习了下VideoView的使用方法. 先看布局文件,很简单 就是一个VideoView和两个ImageView <RelativeLayout ...

  5. Linux sed命令删除指定行

    一.删除包含匹配字符串的行## 删除包含baidu.com的所有行sed -i '/baidu.com/d' domain.file 二.删除匹配行及后所有行## 删除匹配20160229的行及后面所 ...

  6. iOS 格式化输出符号与类型转换

    1.iOS 格式化输出符号 %@    对象 %d,   %i 整数 %u     无符号整形 %f      浮点(双字节) %x,   %X  二进制整数 %o     八进制整数 %zi     ...

  7. 从头开始学c++,补基础,补踏实

    在对c++一知半解的情况下,写c++程序是非常吃力的.对于半路出家写c++的我,写了几个颓废的程序后,再也没有勇气用现有的c++知识去写千疮百孔的程序.非常想写出<整洁的代码>中那样的代码 ...

  8. jQuery截取字符串插件区分中英文

    jQuery截取字符串插件区分中英文:截取字符串功能在大量网站都有应用,比如新闻列表这样的功能,因为新闻的标题长途未必都是恰如其分的,所以要根据需要截取指定长度的字符串,下面就分享一个jQuery实现 ...

  9. js监控键盘大小写事件

    JavaScript键盘事件侦听    在使用JavaScript做WEB键盘事件侦听捕获时,主要采用onkeypress.onkeydown.onkeyup三个事件进行出来.该三个事 件的执行顺序如 ...

  10. IOS 性能优化的建议和技巧

    IOS 性能优化的建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelo ...