本文主要介绍 OpenSSL 的常见用法。

说明:本文介绍的 OpenSSL 常见用法是面向 Linux 操作系统的。

1 概述

此处引用 OpenSSL 官网上的描述,内容如下:

OpenSSL is a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.

2 常见用法

2.1 生成server的密钥对

使用 OpenSSL 的 genrsa 命令生成服务器的密钥对(包含公钥和私钥),命令如下:

openssl genrsa -out server-key.pem 2048

上面的命令生成一个 2048 bit 的密钥对,并输出到文件 server-key.pem 里。

server-key.pem 是 pem 格式的,其内容如下:

[root@node1 /opt/liitdar/mydemos/simples/tls]# cat server-key.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEApAIDnEwCgXCP7ttMHnRvZh98Ud8bOOazC2pV/Kn1fE2tO4+H
...
UoiTjsO4dgR7GKwUTfx+LL/lYygy1V7OFUkbgrx63BlhNk6dSojK
-----END RSA PRIVATE KEY-----

虽然 server-key.pem 文件的头尾都标注着“RSA PRIVATE KEY”,但实际上这个文件中既包括了公钥也包括私钥。公钥和私钥总是成对儿出现的。

2.2 生成server的身份证申请(CSR)

使用 OpenSSL 的 req 命令,使用前面生成的服务器的 server-key.pem 作为输入,生成一个身份证申请(CSR)文件“server-csr.pem”。命令如下:

openssl req -nodes -new -key server-key.pem -subj "/CN=localhost" -out server-csr.pem

这个 server-csr.pem 中的公钥是从 server-key.pem 里提取出来的,域名配置为 localhost。需要注意的是,如果将来启动一个 HTTPS 服务,该 HTTPS 服务使用了签署 server-csr.pem 生成的身份证 CRT,那么客户端必须通过域名 localhost 访问这个 HTTPS 服务。

server-csr.pem 文件也是 PEM 格式的,server-csr.pem 的内容如下:

[root@node1 /opt/liitdar/mydemos/simples/tls]# cat server-csr.pem
-----BEGIN CERTIFICATE REQUEST-----
MIICWTCCAUECAQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0B
...
cSTcWonudFFNZeRdSzcfNl8Zl0WQmOaODZ343Sc=
-----END CERTIFICATE REQUEST-----
[root@node1 /opt/liitdar/mydemos/simples/tls]# 

由上述文件内容可以看到,CSR 文件的头尾都标注着“CERTIFICATE REQUEST”。

2.3 生成CA的身份证(CRT)

通过了解数字签名技术(相关文章链接点击此处),我们知道必须要有一个 CA 对前面生成的 CSR 进行签名,才能生成服务器的身份证(CRT)文件,所以在这里需要生成一个 CA,并创建该 CA 的密钥对和自签名的身份证(CRT),过程如下。

2.3.1 生成CA的密钥对

使用 OpenSSL 的 genrsa 命令,生成 CA 的密钥对:

openssl genrsa -out ca-key.pem 2048

2.3.2 生成CA的身份证

使用 OpenSSL 的 x509 命令,生成 CA 的自签名身份证:

openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca-crt.pem -subj "/CN=test-ca"

上面的命令生成了 CA 的自签署的身份证文件 ca-crt.pem。其中,ca-key.pem 是前面创建的 CA 的私钥(其实是密钥对)。需要注意的是,因为是自签名的 CA 身份证,所以上面步骤中没有生成身份证申请文件(CSR)的过程,直接输出了 CA 的身份证。另外,在本例中 CA 的域名是“test-ca”。

2.4 生成server的身份证(CRT)

在 2.3 节中,我们创建了一个 CA(包括密钥对和身份证),接下来就可以使用该 CA 为前面创建的 server 的 CSR 进行签名了。使用该 CA 的私钥(ca-key.pem)来签署 server 的身份证,命令如下:

openssl x509 -req -in server-csr.pem -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out server-crt.pem -days 365

上面的 OpenSSL 的 x509 命令使用指定的私钥(本例中是前面生成的 CA 的私钥 ca-key.pem)签署身份证申请(CSR)文件(本例中是 server-csr.pem),输出经 CA 签名的身份证(本例中是 server-crt.pem)。即,server 的身份证是用一个自签名的 CA 的来签署的。

server-crt.pem 也是 PEM 格式的,server-crt.pem 内容如下:

[root@node1 /opt/liitdar/mydemos/simples/tls]# cat server-crt.pem
-----BEGIN CERTIFICATE-----
MIICojCCAYoCCQDLXPX19JteTzANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAd0
...
zYKS30I7
-----END CERTIFICATE-----
[root@node1 /opt/liitdar/mydemos/simples/tls]#

由上述文件内容可以看到,CRT 文件的头尾标记为“CERTIFICATE”。

注意:签署 server-csr.pem 得到 server 的身份证(server-crt.pem)的过程中,不仅需要 CA 的密钥 ca-key.pem,还需要 CA 的身份证 ca-crt.pem。

OpenSSL常见用法相关推荐

  1. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

  2. python六:常见数据类型以及常见用法

    bool 布尔值 # 在bool中 0,()(空元祖),[](空列表),{}(空字典),None,""(空字符串) 都是False int 整形 float 浮点型 str 字符串 ...

  3. vue-router 的常见用法

    vue-router 的常见用法 1. 路由重定向 路由重定向指的是:用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面. 通过路由规则的 redirect 属性,指定一个新 ...

  4. 空的宏定义作用及常见用法

    空的宏定义作用及常见用法 我们学习宏定义的第一个概念是,宏定义作为替换作用. 例如: #define SIZE 32 // 接下来代码使用SIZE就相当于32 宏定义是编译器在编译时,将程序中所有SI ...

  5. Arrays常见用法

    Arrays常见用法

  6. sed文本处理常见用法

    sed文本处理常见用法    2011-06-24  TsengYia#126.com http://tsengyia.blog.chinaunix.net/   ################## ...

  7. typeset的常见用法

    [保留] typeset的常见用法 http://www.chinaunix.net 作者:寂寞烈火  发表于:2007-12-16 09:50:34 [发表评论] [查看原文] [Shell讨论区] ...

  8. 框架前期准备篇之AutoFac常见用法总结 转载

    框架前期准备篇之AutoFac常见用法总结 一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点 ...

  9. Java集合Collection与List的关系、常见用法

    关系树 [java] view plain copy print? ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, 查找快 ...

  10. sscanf的常见用法

    例子:  1. 常见用法.  char buf[512] = ;  sscanf("123456 ", "%s", buf);  printf("%s ...

最新文章

  1. Dubbo基础专题——第一章(带你认识Dubbo)
  2. Spark Metrics配置详解
  3. Android 面向切面编程-aspjectj应用
  4. Android社会化分享详解
  5. 2014年二级c语言,2014年计算机二级考试C语言选择题
  6. 作者:周园春(1975-),男,中国科学院计算机网络信息中心研究员、博士生导师...
  7. asp.net配置IIS过程错误解决
  8. ecshop调用文章显示上一篇下一篇_无需整理
  9. java rmi 规范学习
  10. mysql主从复制浅析(一)
  11. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历
  12. 微信小程序下载Excel到本地
  13. 常用IP扫描工具整理一下
  14. 考研408-计算机组成原理-存储系统
  15. Unity使用BMFont制作字体
  16. 《树莓派开发笔记 - 第1部分 基础篇》第7章 树莓派变身路由器
  17. iOS二十种超酷时尚艺术滤镜汇总
  18. 计算机毕设题目设计与实现(论文+源码)_kaic
  19. pq分解法matlab程序,基于MATLAB软件的PQ分解法潮流计算
  20. IKAnalyzer 配置文件介绍

热门文章

  1. Linux内核开发_将Linux内核打包成img文件
  2. CentOS6.5利用Docker部署ShowDoc
  3. spring-cloud Sleuth
  4. Uber如何使用Mesos的?答曰:和Cassandra一起用
  5. HDOJ(HDU) 1785 You Are All Excellent(角度运算)
  6. 如何估算网站日承受最大访问PV
  7. 可变参数列表来实现printf函数的输出
  8. LINUX yum 服务
  9. 对大家的工作和职业方向有益才是我的最终目的
  10. Intelligence System HDU - 3072(强连通分量)