openssl命令(openssl命令行)

http://www.itjxue.com  2023-02-14 12:07  来源:未知  点击次数: 

使用openssl命令从.p12文件中提取证书和私钥。

' openssl pkcs12 -in PATH_TO_YOUR_P12 -nocerts -out key.pem -nodes '

'$ openssl rsa -in key.pem -out key.pem'

.pem 是 base64 编码的,直接文本打开即可看到证书及密钥

OpenSSL 功能介绍

1 概述

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

OpenSSL是实现安全套接字层(SSL v2 / v3)和传输层安全(TLS v1)网络协议及其所需的相关加密标准的加密工具包。

OpenSSL:开源项目

三个组件:

openssl: 多用途的命令行工具,包openssl

libcrypto: 加密算法库,包openssl-libs

libssl:加密模块应用库,实现了ssl及tls,包nss

.openssl命令:

两种运行模式:交互模式和批处理模式

opensslversion:程序版本号

标准命令、消息摘要命令、加密命令

标准命令:enc, ca, req, ...

查看帮助:openssl ?

可以通过openssl 来创建CA和颁发证书,文章

有做介绍,本文仅介绍openssl这个工具包的其他常用功能

2 案例介绍

2.1 对称加密

工具:openssl ?enc, gpg,文章 已经介绍

算法:3des, aes, blowfish, twofish

.enc命令:

对称密码命令允许使用基于密码或明确提供的密钥的各种块和流密码来加密或解密数据。 Base64编码或解码也可以通过本身或加密或解密来执行。

The symmetric cipher commands allow data to be encrypted or decrypted using various block and stream ciphers using keys based on passwords or explicitly provided. Base64 encoding or decoding can also be performed either by itself or in addition to the encryption or decryption.

帮助:man enc

例子

加密文件

以下命令运行需要输入一个密码,当解密的时候需要输入相同的密码才能解密,这里新生成的文件后缀名不一定是cipher,可以自己指定

openssl enc ?-e -des3 -a -salt -in testfile ? -out testfile.cipher

解密文件

openssl ?enc ? -d -des3 -a -salt –in testfile.cipher -out testfile

2.2 公钥加密

公钥加密生成非对称的密钥

算法:RSA, ELGamal

工具:gpg, openssl ?rsautl(man rsautl)

数字签名:

算法:RSA, DSA, ELGamal

密钥交换:

算法:dh

DSA: Digital Signature Algorithm

DSS:Digital Signature Standard

RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。命名是取其名字首字母组合成RSA

RSA公钥与私钥主要用于数字签名(Digital Signature)与认证(Authentication),我们一般也称之为不对称加密/解密。

2.2.1 生成密钥对

帮助:man genrsa

.生成私钥,这个生成密钥的过程要掌握

openssl genrsa ?-out /PATH/TO/PRIVATEKEY.FILE NUM_BITS

私钥文件生成后,建议把权限改成600,保护,放在被其他人查看密码信息

私钥里的文件,如果被拿到,没有通过des这关键字加密的话,就相当于是明文

这个命令执行的时候,要输入八位数的密码,当要使用这个私钥的时候需要输入密码

(umask 077; openssl genrsa –out test.key ?–des 2048)

括号表示子进程,结束后,umask就会恢复未默认的值,umask的值使得其他人和组都没有任何权限,是为了保护生成的私钥

2.2.2 从私钥中提取出公钥,导出公钥

公钥推不出私钥,私钥可以推出公钥

openssl ?rsa ?-in PRIVATEKEYFILE –pubout ?–out PUBLICKEYFILE

Openssl ?rsa ?–in test.key ?–pubout ?–out test.key.pub

公钥是公开的,可以不设置权限,以上是生成公钥

2.2.3 公钥加密文件

openssl rsautl -encrypt -in input.file -inkey pubkey.pem -pubin -out output.file

-in 指定被加密的文件

-inkey 指定加密公钥文件

-pubin 表面是用纯公钥文件加密

-out 指定加密后的文件

例子:

openssl rsautl -encrypt -in ftpback -inkey test.key.pub -pubin -out ftpssl

2.2.4 私钥解密文件

openssl rsautl -decrypt -in input.file -inkey key.pem -out output.file

-in 指定需要解密的文件

-inkey 指定私钥文件

-out 指定解密后的文件

例子:

openssl rsautl -decrypt -in ftpssl -inkey test.key -out ?ftpdec

2.3 单向加密

单向加密即获取摘要

工具:md5sum, sha1sum, sha224sum,sha256sum…

openssl ? ?dgst

dgst:摘要功能输出所提供文件的消息摘要或十六进制形式的文件。 它们也可用于数字签名和验证。

The digest functions output the message digest of a supplied file or files in hexadecimal form. They can also be used for digital signing and verification.

.dgst命令:

帮助:man dgst

openssl ?dgst ?-md5 [-hex默认] ?/PATH/SOMEFILE

openssl dgst ?-md5 testfile

以上命令将文件生成一个固定长度的摘要值,算法是md5,大小占128bite

md5sum /PATH/TO/SOMEFILE

以上这两个md5得到的结果是一样的

.MAC: Message Authentication Code,单向加密(hash)的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制

MAC 消息认证码,构造方法可以基于hash,也可以基于对称加密算法,HMAC是基于hash的消息认证码。数据和密钥作为输入,摘要信息作为输出,常用于认证。

源文档

2.4 生成用户密码

passwd命令:

帮助:man sslpasswd

openssl ?passwd ?-1 -salt SALT

-1对应的就是hash的md5算法

SALT:这里是盐值,人为指定,使得同一密码生成的加密值不一样,最多8位,超过8位没有意义,比如前面8位一样,后面还有几位数不一样,这样生成的密码值是一样的

openssl ?passwd ?-1 –salt centos

grub-md5-crypt同样生成md5加密的口令,centos为盐值

比如这里的密码我都是输入123,但是盐值不一样,一个是centos,一个是centos6,生成的加密值不一样

2.5 生成随机数

帮助:man sslrand

rand命令在播放随机数生成器一次后输出num伪随机字节。 与其他openssl命令行工具一样,除了-rand选项中给出的文件外,PRNG种子使用文件$ HOME / .rnd或.rnd。 如果从这些来源获得足够的播种,将会写回新的$ HOME / .rnd或.rnd文件。

The rand command outputs num pseudo-random bytes after seeding the random number generator once. ?As in other openssl command line tools, PRNG seeding uses the file $HOME/.rnd or .rnd in addition to the files given in the ?-rand option. ?A new $HOME/.rnd or .rnd file will be written back if enough seeding was obtained from these ? sources.

openssl ?rand -base64|-hex NUM

指定数字生成随机数,如果是-hex 后面的数值比如6,那么生成的长度是12位,因为hex生成的随机数是16进制组合的数,hex 后面的num是字节数,一个16进制数占用4位,半个字节

base后面可以生成随机密码

base64 生成随机的数,可以用任何字符,也可以把图片保存成base64的格式,通过base64生成的图片,可以

用base64来还原出图片

NUM: 表示字节数;-hex时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2

3 总结

openssl还有很多用法,本文仅单纯介绍了其中一部分,更多用法请使用帮助 man openssl 进行查看

OpenSSL 入门:密码学基础知识

本文是使用 OpenSSL 的密码学基础知识的两篇文章中的第一篇,OpenSSL 是在 Linux 和其他系统上流行的生产级库和工具包。(要安装 OpenSSL 的最新版本,请参阅 这里 。)OpenSSL 实用程序可在命令行使用,程序也可以调用 OpenSSL 库中的函数。本文的示例程序使用的是 C 语言,即 OpenSSL 库的源语言。

本系列的两篇文章涵盖了加密哈希、数字签名、加密和解密以及数字证书。你可以从 我的网站 的 ZIP 文件中找到这些代码和命令行示例。

让我们首先回顾一下 OpenSSL 名称中的 SSL。

安全套接字层 (Secure Socket Layer)(SSL)是 Netscape 在 1995 年发布的一种加密协议。该协议层可以位于 HTTP 之上,从而为 HTTPS 提供了 S: 安全(secure)。SSL 协议提供了各种安全服务,其中包括两项在 HTTPS 中至关重要的服务:

SSL 有多个版本(例如 SSLv2 和 SSLv3),并且在 1999 年出现了一个基于 SSLv3 的类似协议 传输层安全性(Transport Layer Security)(TLS)。TLSv1 和 SSLv3 相似,但不足以相互配合工作。不过,通常将 SSL/TLS 称为同一协议。例如,即使正在使用的是 TLS(而非 SSL),OpenSSL 函数也经常在名称中包含 SSL。此外,调用 OpenSSL 命令行实用程序以 openssl 开始。

除了 man 页面之外,OpenSSL 的文档是零零散散的,鉴于 OpenSSL 工具包很大,这些页面很难以查找使用。命令行和代码示例可以将主要主题集中起来。让我们从一个熟悉的示例开始(使用 HTTPS 访问网站),然后使用该示例来选出我们感兴趣的加密部分进行讲述。

此处显示的 client 程序通过 HTTPS 连接到 Google

可以从命令行编译和执行该程序(请注意 -lssl 和 -lcrypto 中的小写字母 L):

该程序尝试打开与网站 的安全连接。在与 Google Web 服务器的 TLS 握手过程中,client 程序会收到一个或多个数字证书,该程序会尝试对其进行验证(但在我的系统上失败了)。尽管如此,client 程序仍继续通过安全通道获取 Google 主页。该程序取决于前面提到的安全工件,尽管在上述代码中只着重突出了数字证书。但其它工件仍在幕后发挥作用,稍后将对它们进行详细说明。

通常,打开 HTTP(非安全)通道的 C 或 C++ 的客户端程序将使用诸如文件描述符或网络套接字之类的结构,它们是两个进程(例如,这个 client 程序和 Google Web 服务器)之间连接的端点。另一方面,文件描述符是一个非负整数值,用于在程序中标识该程序打开的任何文件类的结构。这样的程序还将使用一种结构来指定有关 Web 服务器地址的详细信息。

这些相对较低级别的结构不会出现在客户端程序中,因为 OpenSSL 库会将套接字基础设施和地址规范等封装在更高层面的安全结构中。其结果是一个简单的 API。下面首先看一下 client 程序示例中的安全性详细信息。

在与 Web 服务器握手期间,client 程序会接收一个或多个数字证书,以认证服务器的身份。但是,client 程序不会发送自己的证书,这意味着这个身份验证是单向的。(Web 服务器通常配置为 不 需要客户端证书)尽管对 Web 服务器证书的验证失败,但 client 程序仍通过了连接到 Web 服务器的安全通道继续获取 Google 主页。

为什么验证 Google 证书的尝试会失败?典型的 OpenSSL 安装目录为 /etc/ssl/certs,其中包含 ca-certificates.crt 文件。该目录和文件包含着 OpenSSL 自带的数字证书,以此构成 信任库(truststore)。可以根据需要更新信任库,尤其是可以包括新信任的证书,并删除不再受信任的证书。

client 程序从 Google Web 服务器收到了三个证书,但是我的计算机上的 OpenSSL 信任库并不包含完全匹配的证书。如目前所写,client 程序不会通过例如验证 Google 证书上的数字签名(一个用来证明该证书的签名)来解决此问题。如果该签名是受信任的,则包含该签名的证书也应受信任。尽管如此,client 程序仍继续获取页面,然后打印出 Google 的主页。下一节将更详细地介绍这些。

让我们从客户端示例中可见的安全工件(数字证书)开始,然后考虑其他安全工件如何与之相关。数字证书的主要格式标准是 X509,生产级的证书由诸如 Verisign 的 证书颁发机构(Certificate Authority)(CA)颁发。

数字证书中包含各种信息(例如,激活日期和失效日期以及所有者的域名),也包括发行者的身份和数字签名(这是加密过的加密哈希值)。证书还具有未加密的哈希值,用作其标识指纹。

哈希值来自将任意数量的二进制位映射到固定长度的摘要。这些位代表什么(会计报告、小说或数字电影)无关紧要。例如, 消息摘要版本 5(Message Digest version 5)(MD5)哈希算法将任意长度的输入位映射到 128 位哈希值,而 SHA1( 安全哈希算法版本 1(Secure Hash Algorithm version 1))算法将输入位映射到 160 位哈希值。不同的输入位会导致不同的(实际上在统计学上是唯一的)哈希值。下一篇文章将会进行更详细的介绍,并着重介绍什么使哈希函数具有加密功能。

数字证书的类型有所不同(例如根证书、中间证书和最终实体证书),并形成了反映这些证书类型的层次结构。顾名思义,根证书位于层次结构的顶部,其下的证书继承了根证书所具有的信任。OpenSSL 库和大多数现代编程语言都具有 X509 数据类型以及处理此类证书的函数。来自 Google 的证书具有 X509 格式,client 程序会检查该证书是否为 X509_V_OK。

X509 证书基于 公共密钥基础结构(public-key infrastructure)(PKI),其中包括的算法(RSA 是占主导地位的算法)用于生成密钥对:公共密钥及其配对的私有密钥。公钥是一种身份: Amazon 的公钥对其进行标识,而我的公钥对我进行标识。私钥应由其所有者负责保密。

成对出现的密钥具有标准用途。可以使用公钥对消息进行加密,然后可以使用同一个密钥对中的私钥对消息进行解密。私钥也可以用于对文档或其他电子工件(例如程序或电子邮件)进行签名,然后可以使用该对密钥中的公钥来验证签名。以下两个示例补充了一些细节。

在第一个示例中,Alice 将她的公钥分发给全世界,包括 Bob。然后,Bob 用 Alice 的公钥加密邮件,然后将加密的邮件发送给 Alice。用 Alice 的公钥加密的邮件将可以用她的私钥解密(假设是她自己的私钥),如下所示:

理论上可以在没有 Alice 的私钥的情况下解密消息,但在实际情况中,如果使用像 RSA 这样的加密密钥对系统,则在计算上做不到。

现在,第二个示例,请对文档签名以证明其真实性。签名算法使用密钥对中的私钥来处理要签名的文档的加密哈希:

假设 Alice 以数字方式签署了发送给 Bob 的合同。然后,Bob 可以使用 Alice 密钥对中的公钥来验证签名:

假若没有 Alice 的私钥,就无法轻松伪造 Alice 的签名:因此,Alice 有必要保密她的私钥。

在 client 程序中,除了数字证书以外,这些安全性都没有明确展示。下一篇文章使用使用 OpenSSL 实用程序和库函数的示例填充更多详细的信息。

同时,让我们看一下 OpenSSL 命令行实用程序:特别是在 TLS 握手期间检查来自 Web 服务器的证书的实用程序。调用 OpenSSL 实用程序可以使用 openssl 命令,然后添加参数和标志的组合以指定所需的操作。

看看以下命令:

该输出是组成 加密算法套件(cipher suite)()的相关算法的列表。下面是列表的开头,加了澄清首字母缩写词的注释:

下一条命令使用参数 s_client 将打开到 的安全连接,并在屏幕上显示有关此连接的所有信息:

诸如 Google 之类的主要网站通常会发送多个证书进行身份验证。

输出以有关 TLS 会话的摘要信息结尾,包括加密算法套件的详细信息:

client 程序中使用了协议 TLS 1.2,Session-ID 唯一地标识了 openssl 实用程序和 Google Web 服务器之间的连接。Cipher 条目可以按以下方式进行解析:

加密算法套件正在不断发展中。例如,不久前,Google 使用 RC4 流加密算法(RSA 的 Ron Rivest 后来开发的 Ron’s Cipher 版本 4)。 RC4 现在有已知的漏洞,这大概部分导致了 Google 转换为 AES128。

我们通过安全的 C Web 客户端和各种命令行示例对 OpenSSL 做了首次了解,使一些需要进一步阐明的主题脱颖而出。 下一篇文章会详细介绍 ,从加密散列开始,到对数字证书如何应对密钥分发挑战为结束的更全面讨论。

via:

作者: Marty Kalin 选题: lujun9972 译者: wxy 校对: wxy

Linux里面openssl作用是什么?

主要是用来安全的。

openssl命令 – 加密算法

openSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。对应的命令就是openssl命令,用于加密算法。《Linux就该这么学》

语法格式:openssl [参数]

举例子:

用SHA1算法计算文件file.txt的哈西值,输出到stdout:

# openssl dgst -sha1 file.txt

linux-openssl命令行

title: linux-openssl

date: 2020-09-16 11:02:15

categories:

{% note info %}

OpenSSL是一个健壮的、商业级的、功能齐全的开源工具包,用于传输层安全(TLS)协议,以前称为安全套接字层(Secure Sockets Layer, SSL)协议。协议实现基于全强度通用密码库,也可以单独使用。

openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。

span style="color:red;"项目地址/span span style="color:red;"官方网址/span span style="color:red;"手册/span

{% endnote %}

{% tabs configtab, 1 %}

对称算法使用一个密钥。给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同。解密时,使用读密钥与加密密钥相同。

ECB\CBC\CFB\OFB

摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是不可逆的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证。

如今常用的“消息摘要”算法经历了多年验证发展而保留下来的算法已经不多,这其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等。

常用的摘要算法主要有MD5和SHA1。MD5的输出结果为16字节,sha1的输出结果为20字节。

在公钥密码系统中,加密和解密使用的是不同的密钥,这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。这使得通信双方无需事先交换密钥就可进行保密通信。其中加密密钥和算法是对外公开的,人人都可以通过这个密钥加密文件然后发给收信者,这个加密密钥又称为公钥;而收信者收到加密文件后,它可以使用他的解密密钥解密,这个密钥是由他自己私人掌管的,并不需要分发,因此又成称为私钥,这就解决了密钥分发的问题。

主要的公钥算法有:RSA、DSA、DH和ECC。

Openssl中大量用到了回调函数。回调函数一般定义在数据结构中,是一个函数指针。通过回调函数,客户可以自行编写函数,让openssl函数来调用它,即用户调用openssl提供的函数,openssl函数再回调用户提供的函数。这样方便了用户对openssl函数操作的控制。在openssl实现函数中,它一般会实现一个默认的函数来进行处理,如果用户不设置回调函数,则采用它默认的函数。

{% endtabs %}

(责任编辑:IT教学网)

更多

推荐Illustrator教程文章