导语

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

介绍

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. Canvas画椭圆的方法

    虽然标题是画椭圆,但是我们先来说说Canvas中的圆 相信大家对于Canvas画圆都不陌生   oGC.arc(400, 300, 100, 0, 2*Math.PI, false); 如上所示,直接 ...

  2. java编程思想-注解思维导图

  3. c - 向一个排序好的数组插入一个数,插入后数组依然是排序好的

    概述 因为这里只是演示插入1个数,这里我不用malloc再重新分配,而是将原先数组的腾出一个占位符. 完整代码如下: #include <stdio.h> #define LEN 6 // ...

  4. UIView之常用方法

    UIView之常用方法 将一个视图添加为子视图,并使之在最上面显示 -(void)addSubView:(UIView *)view; 将指定子视图移动到顶部 -(void)bringSubViewT ...

  5. 3.题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

    public static void main(String[] args) {                Scanner scanner=new Scanner(System.in);      ...

  6. (转载)图解Linux系统的系统架构

    我以下图为基础,说明Linux的架构(architecture).(该图参考<Advanced Programming in Unix Environment>) 最内层是硬件,最外层是用 ...

  7. WinPcap编程(前言&&学习)

    计算机网络课设要求用WinPcap写对ARP包的接收与发送. 所以学了一下WinPcap的内容. 参考的博客: http://blog.csdn.net/htttw/article/details/7 ...

  8. struct和typedef struct的用法

    我首先想到的去MSDN上看看sturct到底是什么东西,虽然平时都在用,但是每次用的时候都搞不清楚到底这两个东西有什么区别,既然微软有MSDN,我们为什么不好好利用呢,下面是摘自MSDN中的一段话: ...

  9. JavaScript Structure

    Element, Data, Event, Logic Data:----------- 1. method 1 var obj = { name : "thinkpad", ag ...

  10. 使用Snort进行入侵检测方法

    http://blog.itpub.net/21507458/viewspace-1111587/ http://searchitchannel.techtarget.com/tip/Detect-e ...