导语

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

介绍

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. redisbook笔记——redis内存映射数据结构

    虽然内部数据结构非常强大,但是创建一系列完整的数据结构本身也是一件相当耗费内存的工作,当一个对象包含的元素数量并不多,或者元素本身的体积并不大时,使用代价高昂的内部数据结构并不是最好的办法. 为了解决 ...

  2. redisbook笔记——redis内部数据结构

    在Redis的内部,数据结构类型值由高效的数据结构和算法进行支持,并且在Redis自身的构建当中,也大量用到了这些数据结构. 这一部分将对Redis内存所使用的数据结构和算法进行介绍. 动态字符串 S ...

  3. HTML5 类型数组TypeArray(一)

    1.起源 TypedArray是一种通用的固定长度缓冲区类型,允许读取缓冲区中的二进制数据. 其在WEBGL规范中被引入用于解决Javascript处理二进制数据的问题. TypedArray已经被大 ...

  4. WPF概述

    一.概述 WPF(Windows Presentation Foundation,视窗展示[呈现.展现.显示.表示]基础)是Windows的新一代图形子系统,他为开发人员提供了统一的编程模型,可用于构 ...

  5. .net处理页面的抓取数据

    //要抓取数据的页面路径 string url = "http://www.scedu.net/banshi/used-car/lower-secondary-education/middl ...

  6. 防止sql注入 参数化解决方案

    StringBuilder strSql=new StringBuilder(); strSql.Append("insert into T_SysLog("); strSql.A ...

  7. JavaScript--模拟验证码

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 0.0C语言重点问题回顾

    左值和右值得区别:左值是用来表明变量的身份的,右值更加侧重于值本身: void*是个例外,它只有基地址没有类型信息,所以无法解引用. int *p = malloc(100); char *s = m ...

  9. 你好,C++(7)第三部分 C++世界众生相 3.2.1 变量的定义与初始化

    第3部分 C++世界众生相 在听过了HelloWorld.exe的自我介绍,完成了与C++世界的第一次亲密接触后,大家是不是都急不可待地想要一试身手,开始编写C++程序了呢?程序的两大任务是描述数据和 ...

  10. 我牵头,你做事——C#委托实践

     我牵头,你做事——C#委托实践一 2007-09-05 23:54:54 标签:委托 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http ...