0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux OpenSSL介绍

马哥Linux运维 来源:博客园 2025-06-26 14:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux openssl介绍

SSL和TLS

了解openssl之前,我们首先要了解SSLTLS是什么。

SSL(Secure Sockets Layer)是一个协议,叫作安全套接层协议。旨在为应用层数据提供加密的传输层通道。,即数据从应用层去往传输层,会首先被ssl给加密。

但是随着时间的发展,SSL的继任者TLS(Transport Layer Security)传输层安全协议被引入,为网络连接提供了更高级的安全性,TLS提供更多的加密算法和选择,所以开始逐渐取代了早期的SSL版本。

ca533c4a-4f6a-11f0-b715-92fbcf53809c.png

例如:

在引入SSL和TLS之前,使用HTTP协议的请求和响应是明文的,这意味着数据包在传输过程中容易被第三方窃听、抓取或篡改。引入SSL/TLS之后,当数据从应用层发送至传输层时,它会被SSL或TLS加密。这样,一个安全的通道被建立,确保数据从发送方(一个端)到接收方(另一个端)的整个路径都是加密的,从而实现端到端的安全性。

应用层数据在前往传输层加密的原因;

一直有一个疑问,为什么应用层的数据要在传输层加密,而不是在网络层或者其它层进行加密。刚开始以为应用层数据肯定要从传输层经过,如果在传输层已经被别人捕获了,在下一层加密没意义了。后面才认识到这是有考虑的:

1. 在传输层对应用层数据进行加密,具有很强的选择性,因为传输层加密允许为不同的应用选择是否需要加密,可以给指定的应用加密,如果在网络层或者数据链路层,全部都会被加密。

2. 传输层加密能保证端到端的安全性,网络层或数据链路层加密可能只会在两个设备或两个网络之间提供加密

3. 将数据从传输层加密了,在网络层或数据链路层被捕获了别人耶看不懂。

openssl

OpenSSL是一个开源的工具库和工具集,用于处理SSL和TLS协议以及对数据进行加密和解密的各种操作。

openssl中文网

一般我们最常用的工具,就是这个软件包里面提供的一个叫作 openssl 的命令行工具,通过它可以实现一些加密算法,像SSL、TLS等等。

在Linux发行版系统中,一般默认就安装了openssl工具,通过 openssl verson 就可以查看openssl的版本信息。

ca658c56-4f6a-11f0-b715-92fbcf53809c.png

openssl基础用法

实现对称加密

对称加密就是加密和解密使用的是同一个密钥,是通过将原始数据分割成若干块来逐个进行加密,所以效率高、速度快

openssl enc -e 算法类型  -a -salt -in 需要加密的文件 -out 存放加密生成的结果的文件

例如:

openssl enc -e -des3 -a -salt -infile1 -outfile1.cipher

ca75d282-4f6a-11f0-b715-92fbcf53809c.png

说明:

• 使用 -salt 来加盐(加盐就是在进行哈希加密的时候加上随机字符串)的时候,openssl会自动生成一个随机的盐,并在加密过程中使用它

• 除了 -des3 这种堆成加密类型,还有-des等类型。使用 man openssl enc 可以看到其它的一些加密类型应该使用的对应参数

• 使用 -a 参数可以将加密后的内容通过base64这种彪马格式来显示

实现对称解密

openssl enc -d 算法类型 -a -salt -in需要解密的文件 -out解密后的问题

例如:

openssl enc -d -des3 -a -salt -infile1.cipher -outfile1_new

ca8778ac-4f6a-11f0-b715-92fbcf53809c.png

说明:

• 算法类型需要和加密时使用的保持一致

• 使用对称加密的时候会要求提示输入密码。因为对称加密算法使用同一个密码进行加密和解密

实现非对称加密

非对称加密的特点是密钥成对出现,加密和解密用的密钥不相同,并且通信双方都需要各自的密钥和私钥

• 如果使用公钥加密、私钥解密。加密的数据只能自己解开,能充分保证数据的安全

• 如果使用私钥加密,公钥解密。这样能确定数据的来源性,这就是我们所说的数字签名

生成私钥:

openssl genrsa -out存放私钥的文件 使用的加密算法类型

例如:

openssl genrsa -outb.enc

ca971f32-4f6a-11f0-b715-92fbcf53809c.png

说明:

• 不指定密钥的长度,默认长度就是2048,密钥长度越长,其加密强度就越高,加密何解密时间越长,一般使用默认的就可以了

• 不指定加密算法的类型,默认使用的非对称加密算法是RSA

• 生成的密钥默认是按照 PEM格式 输出,即以base64格式显示文本信息。

生成公钥:

公钥钥是隐藏在私钥内部的,可以通过私钥的到公钥

openssl rsa -in私钥文件 -pubout -out提取出来保存的公钥文件

例如:



caacded0-4f6a-11f0-b715-92fbcf53809c.png

实现非对称解密

公钥加密:

openssl rsautl -encrypt -pubin -inkey 公钥文件 -in需要加密的文件 -out加密后的文件

私钥解密:

openssl rsautl -decrypt -inkey 私钥文件 -in需要解密的文件 -out解密后的文件

实现单向哈希

hash是一种单向的加密算法,是不可逆的。使用哈希算法加密出来的结果就叫做摘要,这玩意儿有个特点就是长度固定,内容不同。一旦原数据发生改变,摘要也会随之发生改变,所以一般用来确认数据的完整性,看有没有被人篡改。

在这里有一个叫作指纹的概念,指纹是每个人独一无二的,不同的人(数据)有不同的指纹(摘要),但是只知道了指纹(摘要),也不能知道是谁(不能通过摘要推出原数据)。

openssl dgst 使用的哈希算法 对哪个文件生成摘要

例如:

openssl dgst file1

cabaad4e-4f6a-11f0-b715-92fbcf53809c.png

说明:

• 不指定哈希算法,默认使用的是 SHA256算法,可以使用 man openssl dgst查看对应选项代表的哈希算法

• 不指定显示的类型,默认显示的是十六进制的字符

生成用户密码

可以使用openssl来给用户生成密码,使用 useradd 命令创建用户的时候可以指定用户的密码,但是这个密码必须是加密的密码才行,这个时候就可以使用openssl来生成一个。

其实就是利用哈希算法来给密码生成一个摘要值

openssl passwd 算法类型 用户密码

不指定任何哈希算法选项,那么默认使用的是传统的UNIX crypt() 方法,比 MD5 还老

算法类型说明:

• -6:表示采用sha512这种加密算,也会默认使用随机的盐

• -5:sha256算法,也会默认使用随机的盐

• -1:md5算法,会默认生成一个随机的盐来与密码一起哈希

这三种都是UNIX密码哈希方案的一部分

例如:

useradd bob -m -s /bin/bash -p $(openssl passwd -6 redhat)

cacb3c54-4f6a-11f0-b715-92fbcf53809c.png

使用useradd创建用户的时候,如果没指定相关属性,会默认使用 /etc/default/useradd中定义的属性信息。

生成随机数

opensslrand显示格式(主要有hex和base64) 输出的随机字节数量

例如:生成16个随机字节并以十六进制格式输出

opensslrand-hex16

cad6d94c-4f6a-11f0-b715-92fbcf53809c.png

说明:一个十六机制数由4个二进制数组成,一个字节8位,所以一个十六进制数等于两个字节。总共会输出三十二个字符

例如:以base64编码形式显示随机数

opensslrand-base6416

base64编码介绍

base64是一种用64个字符来表示任意二进制数据的方法。在一些早期的协议中,例如smtp、http。他们只设计了ASCII字符数据的传输,当需要包含非ASCII字符或者二进制数据时就会出问题,因为虽然二进制数据都是由于0和1组成,但是难点在于如何表示和传输这些0和1。

这个时候使用base64编码完美解决问题,将二进制数据转为一个仅由ASCII字符组成的安全字符串,这样可以避免由于二进制数据的传输而导致的任何解释或传输问题

编码原理

1. 先将要三个字节的二进制数据(一共24位),重新分为4组,每组6位。(每6位就可以表示一个值,范围从0到63)

2. 然后将每个6位的数据(一个组)转换为十进制数字,然后根据base64的字符集得到相应的字符。

3. 再重复这个过程直到所有的输入数据都被处理完

4. 如果原始数据(即待编码的数据)的长度不是3个字节的整数倍(base64将每3个字节作为一个单元来处理),会添加填充字符,即=,来使其长度满足要求。这就是看到等号的原因

链接:https://www.cnblogs.com/heyongshen/p/17787948.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217971
  • 网络
    +关注

    关注

    14

    文章

    8130

    浏览量

    93088
  • 传输层
    +关注

    关注

    0

    文章

    31

    浏览量

    11184

原文标题:OpenSSL完全指南:Linux系统安全通信的终极武器

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式学习-ElfBoard ELF 1板卡-移植openssl

    openssl是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连线者的身份。这个包被广泛应用于互联网的网页服务器上。下面这篇文章就给各位小伙伴介绍一下如何在
    发表于 12-28 08:53

    openssl移植到arm-linux全过程相关资料分享

    本文章记录了将openssl移植到arm-linux下的全部过程移植环境编译环境:Ubuntu18.04-amd64模板环境:i.mx6ul Linux 4.1.15编译链
    发表于 07-01 12:22

    怎样将openssl移植到arm-linux下呢

    怎样将openssl移植到arm-linux下呢?有哪些操作流程?
    发表于 10-22 06:55

    openssl有哪些应用呢

    1、环境配置在me.h文件里修改以下宏定义ME_COM_MBEDTLS 0ME_COM_MATRIXSSL 0ME_COM_NANOSSL 0ME_COM_OPENSSL 12、添加
    发表于 12-16 07:41

    介绍移植openssl库到嵌入式设备中的具体方法

    本篇文章是介绍国密算法在嵌入式设备中应用方法系列文章的第三篇,介绍移植openssl库到嵌入式设备中的具体方法,当然最终的目的还是使我们的设备能支持国密算法。同上一篇文章中介绍的mir
    发表于 12-21 06:19

    Openssl嵌入式arm移植笔记分享,绝对实用

    openssl-1.1.1-stable-SNAP-20190915.tar.gz3、输入命令 ./config no-asm shared --prefix=$(pwd)/install_arm4、设置交叉编译工具链接92 行设置CROSS_COMPILE = arm-linu
    发表于 12-27 06:51

    交叉编译openssl时出现找不到编译器的问题怎么办

    交叉编译ffmpeg时是没出现该问题的,但是在交叉编译openssl-1.1.0f时却出现了如下错误,实在是头疼啊!root@ubuntu:/home/openssl/openssl
    发表于 12-01 06:00

    OpenSSL在电子商务安全中的应用

    基于公共密钥技术的SSL 协议已经成为Internet 上广泛应用的安全通信标准,源码开放的OpenSSL是对SSL 协议的完整实现。介绍OpenSSL 在电子商务安全中的应用。
    发表于 08-31 15:58 12次下载

    如何才能使用OpenSSL实现一个基本的安全连接的详细概述

    OpenSSL API 的文档有些含糊不清。因为还没有多少关于 OpenSSL 使用的教程,所以对初学者来说,在 应用程序中使用它可能会有一些困难。那么怎样才能使用 OpenSSL 实现一个基本的安全连接呢? 本教程将帮助您解决
    的头像 发表于 05-27 10:26 6613次阅读
    如何才能使用<b class='flag-5'>OpenSSL</b>实现一个基本的安全连接的详细概述

    密码学OpenSSL的入门基础知识整理合集

    本文是使用 OpenSSL 的密码学基础知识的两篇文章中的第一篇,OpenSSL 是在 Linux 和其他系统上流行的生产级库和工具包。(要安装 OpenSSL 的最新版本,请参阅 这
    的头像 发表于 02-07 15:29 4349次阅读
    密码学<b class='flag-5'>OpenSSL</b>的入门基础知识整理合集

    嵌入式Linux系统openssl库移植

    openssl库移植1 什么是openssl可以这么说,只要你的应用程序和网络安全有关系,不管是http还是mqtt,那么都需要依赖到openssl;首先openssl是一个开源库,功
    发表于 11-01 16:31 8次下载
    嵌入式<b class='flag-5'>Linux</b>系统<b class='flag-5'>openssl</b>库移植

    openssl】从openssl的常用接口浅谈【内存泄漏】

    使用openssl有内存泄露风险吗?从openssl的常用接口调用浅谈【内存泄漏】的风险和规避。
    的头像 发表于 08-31 11:24 4352次阅读
    【<b class='flag-5'>openssl</b>】从<b class='flag-5'>openssl</b>的常用接口浅谈【内存泄漏】

    openssl】利用openssl命令行快速生成RSA私钥

    openssl】如何利用openssl命令行快速生成RSA私钥?
    的头像 发表于 08-31 12:58 4299次阅读
    【<b class='flag-5'>openssl</b>】利用<b class='flag-5'>openssl</b>命令行快速生成RSA私钥

    OpenSSL安装常见问题

    OpenSSL安装常见问题
    的头像 发表于 07-07 11:17 1521次阅读
    <b class='flag-5'>OpenSSL</b>安装常见问题

    linux系统通过OpenSSL工具自签https证书

    工具介绍 OpenSSL是SSL/TLS协议的实现工具 key是私钥文件,用于对发送给客户端的数据加密,以及对从客户端接收的数据进行解密。 csr是证书签名请求文件,用于提交给证书颁发机构(CA
    的头像 发表于 12-09 13:53 1977次阅读