最新OpenSSL简明教程

OpenSSL是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,但是,你不应该只将其作为一个库来使用,它还是一个多用途的、跨平台的密码工具。

下载

官网:http://slproweb.com/products/Win32OpenSSL.html

在这里插入图片描述

安装

如果是Win64OpenSSL-1_1_1g.exe 基本采用一路下一步即可。
如果是非安装版本则需要设计环境变量,安装完成后将安装位置bin目录的文件路径添加到系统环境变量,此时就可以在全局使用openssl指令,打开命令行输入openssl version查看openssl是否正确安装。安装完成后,选择一个存放证书的位置,打开控制台通过openssl生成证书。

配置

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
Chrome 58以后不再使用CN校验地址(就是就是浏览器地址栏URL中的那个地址host)了,而是使用SAN,IE 11还是使用CN。

格式

证书主要的文件类型和协议有: PEM、DER、PFX、JKS、KDB、CER、KEY、CSR、CRT、CRL 、OCSP、SCEP等。

1. KEY

一般指PEM格式的私钥文件。

2. CRT

证书文件。可以是PEM格式。

3. PEM

PEM格式的证书文件(*.pem)由Base64编码的二进制内容和开头行(-----BEGIN CERTIFICATE-----)、结束行(-----END CERTIFICATE-----)组成,支持使用notepad++等文本编辑器打开。对于CER、CRT格式的证书,您可通过直接修改证书文件扩展名的方式将其转换成PEM格式。例如,将server.crt证书文件直接重命名为server.pem。

4. CSR

证书请求文件(Certificate Signing Request)。生成 X509 数字证书前,一般先由用户提交证书申请文件,然后由 CA 来签发证书。大致过程如下(X509 证书申请的格式标准为 pkcs#10 和 rfc2314):

  1. 用户生成自己的公私钥对;
  2. 构造自己的证书申请文件,符合 PKCS#10 标准。该文件主要包括了用户信息、公钥以及一些可选的属性信息,并用自己的私钥给该内容签名;
  3. 用户将证书申请文件提交给 CA;
  4. CA 验证签名,提取用户信息,并加上其他信息(比如颁发者等信息),用 CA 的私钥签发数字证书;
  5. 说明:数字证书(如x.509)是将用户(或其他实体)身份与公钥绑定的信息载体。一个合法的数字证书不仅要符合 X509 格式规范,还必须有 CA 的签名。用户不仅有自己的数字证书,还必须有对应的私钥。X509v3 数字证书主要包含的内容有:证书版本、证书序列号、签名算法、颁发者信息、有效时间、持有者信息、公钥信息、颁发者 ID、持有者 ID 和扩展项。

5. DER

辨别编码规则 (DER) 可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。它是无报头的 - PEM 是用文本报头包围的 DER。

6. PFX

公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件。通常可以将Apache/OpenSSL使用的“KEY文件 + CRT文件”格式合并转换为标准的PFX文件,你可以将PFX文件格式导入到微软IIS 5/6、微软ISA、微软Exchange Server等软件。转换时需要输入PFX文件的加密密码。

7. JKS

通常可以将Apache/OpenSSL使用的“KEY文件 + CRT文件”格式”转换为标准的Java Key Store(JKS)文件。JKS文件格式被广泛的应用在基于JAVA的WEB服务器、应用服务器、中间件。你可以将JKS文件导入到TOMCAT、 WEBLOGIC 等软件。

8. KDB

通常可以将Apache/OpenSSL使用的“KEY文件 + CRT文件”格式转换为标准的IBM KDB文件。KDB文件格式被广泛的应用在IBM的WEB服务器、应用服务器、中间件。你可以将KDB文件导入到IBM HTTP Server、IBM Websphere 等软件。

9. OCSP

在线证书状态协议(OCSP,Online Certificate Status Protocol,rfc2560)用于实时表明证书状态。OCSP 客户端通过查询 OCSP 服务来确定一个证书的状态,可以提供给使用者一个或多个数字证书的有效性资料,它建立一个可实时响应的机制,让用户可以实时确认每一张证书的有效性,解决由CRL引发的安全问题。。OCSP 可以通过 HTTP协议来实现。rfc2560 定义了 OCSP 客户端和服务端的消息格式。

10. CER

一般指使用DER格式的证书。

11. CRL

证书吊销列表 (Certification Revocation List) 是一种包含撤销的证书列表的签名数据结构。CRL 是证书撤销状态的公布形式,CRL 就像信用卡的黑名单,用于公布某些数字证书不再有效。CRL 是一种离线的证书状态信息。它以一定的周期进行更新。CRL 可以分为完全 CRL和增量 CRL。在完全 CRL 中包含了所有的被撤销证书信息,增量 CRL 由一系列的 CRL 来表明被撤销的证书信息,它每次发布的 CRL 是对前面发布 CRL 的增量扩充。基本的 CRL 信息有:被撤销证书序列号、撤销时间、撤销原因、签名者以及 CRL 签名等信息。基于 CRL 的验证是一种不严格的证书认证。CRL 能证明在 CRL 中被撤销的证书是无效的。但是,它不能给出不在 CRL 中的证书的状态。如果执行严格的认证,需要采用在线方式进行认证,即 OCSP 认证。一般是由CA签名的一组电子文档,包括了被废除证书的唯一标识(证书序列号),CRL用来列出已经过期或废除的数字证书。它每隔一段时间就会更新,因此必须定期下载该清单,才会取得最新信息。

12. SCEP

简单证书注册协议。基于文件的证书登记方式需要从您的本地计算机将文本文件复制和粘贴到证书发布中心,和从证书发布中心复制和粘贴到您的本地计算机。 SCEP可以自动处理这个过程但是CRLs仍然需要手工的在本地计算机和CA发布中心之间进行复制和粘贴。

13. PKCS7

加密消息语法(pkcs7),是各种消息存放的格式标准。这些消息包括:数据、签名数据、数字信封、签名数字信封、摘要数据和加密数据。

14. PKCS12

– pkcs12 (个人数字证书标准)用于存放用户证书、crl、用户私钥以及证书链。pkcs12 中的私钥是加密存放的。

使用

1. CA证书(根证书)

自签名的证书,不被浏览器信任,适合内部或者测试使用。

1) 生成证书私钥

使用openssl工具生成一个RSA私钥
openssl genrsa -out identify/ca/ca.key 2048
在这里插入图片描述

2) 生成签名请求

需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。
可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书,需要花钱。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名。
Openssl req -new -key identify/ca/ca.key -out identify/ca/ca.csr -config bin/cnf/openssl.cnf
在这里插入图片描述
注意:
配置文件中已经有默认值了,shell交互时一路回车就行。
-config bin/cnf/openssl.cnf 是指定当前openssl配置文件位置,如果已设置系统环境变量可忽略此参数。

3) 生成签名证书

内部或者测试使用,只要忽略证书提醒就可以了。
openssl x509 -req -days 365 -in identify/ca/ca.csr -signkey identify/ca/ca.key -out identify/ca/ca.crt
在这里插入图片描述

4) 转换证书格式

openssl x509 -in identify/ca/ca.crt -out identify/ca/ca.pem -outform PEM
在这里插入图片描述

2. 服务端证书

1) 生成证书密钥

openssl genrsa -out identify/server/server.key 2048
在这里插入图片描述

2) 生成签名请求

openssl req -new -out identify/server/server.csr -key identify/server/server.key -config bin/cnf/openssl.cnf
在这里插入图片描述
出现如下异常信息,缺少必要目录文件(用命令创建目录)。
在这里插入图片描述
依次执行如下创建必要目录命令

  1. mkdir demoCA
    在这里插入图片描述
  2. cd demoCA
    在这里插入图片描述
  3. mkdir newcerts
  4. mkdir private
    在这里插入图片描述
  5. cd.>index.txt
    在这里插入图片描述
  6. echo 01>>serial
3) 生成签名证书

openssl ca -in identify/server/server.csr -out identify/server/server.crt -cert identify/ca/ca.crt -keyfile identify/ca/ca.key -extensions v3_req -config bin/cnf/openssl.cnf
在这里插入图片描述

3. 客户端证书

1) 生成证书密钥

openssl genrsa -des3 -out identify/client/client.key 2048
例如输入密码:12345
在这里插入图片描述

2) 生成签名请求

openssl req -new -key identify/client/client.key -out identify/client/client.csr -config bin/cnf/openssl.cnf
在这里插入图片描述

3) 生成签名证书

openssl ca -in identify/client/client.csr -cert identify/ca/ca.crt -keyfile identify/ca/ca.key -out identify/client/client.crt -config bin/cnf/openssl.cnf
在这里插入图片描述

异常

1) 缺少demoCA目录

在这里插入图片描述
依次执行如下创建必要目录命令

  1. mkdir demoCA
  2. cd demoCA
  3. mkdir newcerts
  4. mkdir private
  5. cd.>index.txt
  6. echo 01>>serial

2) 已存在demoCA目录

在这里插入图片描述
出现如下异常信息,说明“demoCA”目录中的文件已被占用,只要删除原有目录文件重新创建demoCA目录下面所有文件即可解决此问题。

域名

Widow下设置域名首先要找到PC上hosts文件的位置,如果没有的话需要新建文件(文件位置在:C:\Windows\System32\drivers\etc),然后用记事本打开进行编辑
内容:ip 域名
例如:192.168.0.105 http://demo.com

应用

1. Nginx

在nginx.conf中修改如下配置项启用https服务,指定server.crt证书和server.key私钥文件。
在这里插入图片描述
在客户端浏览器中安装ca根证书,基本操作为右键打开ca.crt文件,在证书导入导中存储位置选择“本地计算机”下一步进入证书存储界面,选择将所有证书都存入下列存储,点击“浏览”选择“受信任的根证书颁发机构”点击“确认”。
在这里插入图片描述
打开证书导入向导界面
在这里插入图片描述
选择证书存储方式
在这里插入图片描述
证书导入成功。
在这里插入图片描述
至此ca证书在浏览器中安装成功,可以访问:https://www.caxxx1.com。
在这里插入图片描述
由于ca证书是自签名导致当前浏览器不认,没有出现绿色的小锁子图标,如果想让所有浏览器承认还需要通过合法机构进行购买。

2. Nodejs

在项目要目录下新建identify目录用来存放证书文件,把openssl生成的server证书复制进来形成如下项目文件结构。
在这里插入图片描述
修改bin/www项目启动文件,增加https服务监听并加server证书路径。
在这里插入图片描述
启动web项目后访问:https://www.caxxx1.com
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黒木涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值