首页 > 其他分享 >OpenSSL 介绍(1)--概念及安装

OpenSSL 介绍(1)--概念及安装

时间:2023-02-05 14:11:06浏览次数:32  
标签:cbc 加密 ecb -- aria OpenSSL SSL 安装

OpenSSL 是一个功能丰富的开源软件包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份;本文主要介绍其基本概念及安装,文中所使用到的软件版本:OpenSSL 1.1.1s、CentOS 7.9.2009。

1、OpenSSL 概念

1.1、SSL 简介

SSL 是 Secure Sockets Layer(安全套接层协议)的缩写,可以在 Internet 上提供秘密性传输。Netscape 公司在推出第一个Web浏览器的同时,提出了 SSL 协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为 Internet 上保密通讯的工业标准。 SSL 能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL 协议要求建立在可靠的传输层协议(TCP)之上。SSL 协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于 SSL 协议之上。SSL 协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

1.2、安全信道的特性

1.2.1、数据保密性

信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。

1.2.2、数据完整性

加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。

1.2.3、安全验证

加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL 是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。

1.3、OpenSSL 的功能

1.3.1、基本功能

OpenSSL 整个软件包大概可以分成三个主要的功能部分:SSL 协议库、应用程序以及密码算法库。OpenSSL 的目录结构自然也是围绕这三个功能部分进行规划的。

作为一个基于密码学的安全开发包,OpenSSL 提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

1.3.2、辅助功能

BIO 机制是 OpenSSL 提供的一种高层 IO 接口,该接口封装了几乎所有类型的 IO 接口,如内存访问、文件访问以及 Socket 等。这使得代码的重用性大幅度提高,OpenSSL 提供 API 的复杂性也降低了很多。

OpenSSL 对于随机数的生成和管理也提供了一整套的解决方法和支持 API 函数。随机数的好坏是决定一个密钥是否安全的重要前提。

OpenSSL 还提供了其它的一些辅助功能,如从口令生成密钥的 API,证书签发和管理中的配置文件机制等等。如果你有足够的耐心,将会在深入使用 OpenSSL 的过程慢慢发现很多这样的小功能,让你不断有新的惊喜。

1.4、算法

1.4.1、密钥证书管理

密钥和证书管理是PKI的一个重要组成部分,OpenSSL 为之提供了丰富的功能,支持多种标准。

首先,OpenSSL 实现了 ASN.1 的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及 CRL 等数据对象的 DER、PEM 和 BASE64 的编解码功能。OpenSSL 提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的 DER 编解码功能。并实现了私钥的 PKCS#12 和 PKCS#8 的编解码功能。OpenSSL 在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。

在此基础上,OpenSSL 实现了对证书的 X.509 标准编解码、PKCS#12 格式的编解码以及 PKCS#7 的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。

事实上,OpenSSL 提供的 CA 应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。

1.4.2、SSL 和 TLS 协议

OpenSSL 实现了 SSL 协议的 SSLv2 和 SSLv3,支持了其中绝大部分算法协议。OpenSSL 也实现了 TLSv1.0,TLS 是 SSLv3 的标准化版,虽然区别不大,但毕竟有很多细节不尽相同。

虽然已经有众多的软件实现了 OpenSSL 的功能,但是 OpenSSL 里面实现的 SSL 协议能够让我们对 SSL 协议有一个更加清楚的认识,因为至少存在两点:一是 OpenSSL 实现的 SSL 协议是开放源代码的,我们可以追究 SSL 协议实现的每一个细节;二是 OpenSS L实现的 SSL 协议是纯粹的 SS L协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了 SSL 协议的本来面目。

1.4.3、对称加密

OpenSSL 一共提供了多种对称加密算法,其中 RC4 是流加密算法 ,其它的是分组加密算法,如:AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES 使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是 128 位,其它算法使用的则是 64 位。事实上,DES 算法里面不仅仅是常用的 DES 算法,还支持三个密钥和两个密钥 3DES 算法。

1.4.4、非对称加密

OpenSSL 一共实现了多种非对称加密算法,如:DH 算法、RSA 算法、DSA 算法和椭圆曲线算法(EC)。DH 算法一般用于密钥交换。RSA 算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA 算法则一般只用于数字签名。

1.4.5、信息摘要

OpenSSL 实现了多种信息摘要算法,如:MD4、MD5、MDC2、SHA。

2、OpenSSL 安装

2.1、下载源码

https://www.openssl.org/source/

这里下载 1.1.1s 版本,下载后解压:

tar zxvf openssl-1.1.1s.tar.gz

2.2、默认路径安装

进入到源码目录后,执行如下命令:

$ ./config
$ make
$ make test
$ make install

该安装方式默认会安装到 /usr/local 目录下,所以需要使用 root 用户或有 sudo 权限的用户来安装。

2.3、自定义路径安装

该安装方式通过自定义安装目录从而可以使用普通用户来安装 OpenSSL:

shell> ./config --prefix=/home/mongo/soft/openssl-1.1.1s --openssldir=/home/mongo/soft/openssl-1.1.1s/ssl  -Wl,-rpath,/home/mongo/soft/openssl-1.1.1s/lib
shell> make
shell> make test
shell> make install

 参数说明:

--prefix OpenSSL 的安装目录
--openssldir OpenSSL配置文件的目录,以及证书和密钥的默认目录
-Wl,-rpath 运行时指定引用库的位置

更多详细的安装说明可参考源码目录中安装说明文件:INSTALL

2.4、简单使用

2.4.1、查看使用方法

执行 openssl help 查看用法:

shell> /home/mongo/soft/openssl-1.1.1s/bin/openssl help
Standard commands
asn1parse         ca                ciphers           cms               
crl               crl2pkcs7         dgst              dhparam           
dsa               dsaparam          ec                ecparam           
enc               engine            errstr            gendsa            
genpkey           genrsa            help              list              
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              rehash            
req               rsa               rsautl            s_client          
s_server          s_time            sess_id           smime             
speed             spkac             srp               storeutl          
ts                verify            version           x509              

Message Digest commands (see the `dgst' command for more details)
blake2b512        blake2s256        gost              md4               
md5               mdc2              rmd160            sha1              
sha224            sha256            sha3-224          sha3-256          
sha3-384          sha3-512          sha384            sha512            
sha512-224        sha512-256        shake128          shake256          
sm3               

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       aria-128-cbc      aria-128-cfb      
aria-128-cfb1     aria-128-cfb8     aria-128-ctr      aria-128-ecb      
aria-128-ofb      aria-192-cbc      aria-192-cfb      aria-192-cfb1     
aria-192-cfb8     aria-192-ctr      aria-192-ecb      aria-192-ofb      
aria-256-cbc      aria-256-cfb      aria-256-cfb1     aria-256-cfb8     
aria-256-ctr      aria-256-ecb      aria-256-ofb      base64            
bf                bf-cbc            bf-cfb            bf-ecb            
bf-ofb            camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  
camellia-192-ecb  camellia-256-cbc  camellia-256-ecb  cast              
cast-cbc          cast5-cbc         cast5-cfb         cast5-ecb         
cast5-ofb         des               des-cbc           des-cfb           
des-ecb           des-ede           des-ede-cbc       des-ede-cfb       
des-ede-ofb       des-ede3          des-ede3-cbc      des-ede3-cfb      
des-ede3-ofb      des-ofb           des3              desx              
idea              idea-cbc          idea-cfb          idea-ecb          
idea-ofb          rc2               rc2-40-cbc        rc2-64-cbc        
rc2-cbc           rc2-cfb           rc2-ecb           rc2-ofb           
rc4               rc4-40            seed              seed-cbc          
seed-cfb          seed-ecb          seed-ofb          sm4-cbc           
sm4-cfb           sm4-ctr           sm4-ecb           sm4-ofb

可以看到,OpenSSL 命令主要分为三类:标准命令、消息摘要命令、加解密命令。

2.4.2、查看版本

 执行 openssl version 可以查看 OpenSSL 的版本:

shell> /home/mongo/soft/openssl-1.1.1s/bin/openssl version
OpenSSL 1.1.1s  1 Nov 2022

 

 

参考:https://baike.baidu.com/item/openssl/5454803

 

标签:cbc,加密,ecb,--,aria,OpenSSL,SSL,安装
From: https://www.cnblogs.com/wuyongyin/p/17011937.html

相关文章

  • 【C语言】文件的打开和关闭。
    ......
  • 三分
    三分(单峰/单谷函数求最大/最小值)影子长度题目描述:人左右走动,求影子L的最长长度。分析:根据图,发现当灯、人的头部和墙角成一条直线时(假设此时人站在A点),此时的长......
  • SD-WAN网络编排基本原理
    传统企业WAN的部署和调整过程涉及交换、路由、安全和广域优化等多个网络技术领域,技术复杂度高,且由人工手动操作,因而耗时长、效率低、容易出错。因此,人们希望通过引入网络自......
  • 柳冠中谈如何读书
    1、核心读5-6本:每本看3-4遍,每半年至一年回顾一遍,会有新的发现和提升;因为不同时间看同一个东西会有不一样的收获。如果一年看50本书,会被不同的思想淹没掉,因为每本书讲......
  • 简简单单告诉你什么是k8s
    简简单单告诉你什么是k8s导读K8S是什么?给我们带来了什么?这篇文章来带你简单了解一下目前最火热的平台软件.什么是K8SK8S(Kubernetes)是一个可移植的、可扩展的开源平台,......
  • 66拼dd评论采集
    #需要更改的地方cookie、accesstoken、与之对应的用户id、#coding=gbk#-*-coding:uft-8-*-#@Time:2023/2/4#@Author:十架bgm#@FileName:pdimport......
  • P2016题解
    P2016题解题目描述Bob要建立一个古城堡,城堡中的路形成一棵无根树。他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能瞭望到所有的路。注意,某个士兵在一个结点上时......
  • 注解开发 和纯注解开发
    把这个<bean 改造成注解开发:在impl类里加上@component就可以了       纯注解开发:用annotationconfigapplicationcontext,然后用@ComponantScan  ......
  • 让 MSYS2 Bash 像 Git Bash 一样显示 Git 分支名称
    GitforWindows的Bash有一个很实用的功能,如果当前目录处于Git仓库中,那么命令行中会显示当前Git分支的名称(见下图)。然而原版的MSYS2Bash没有这个功能(见下图),不......
  • 为什么 L1 正则化能做特征选择而 L2 正则化不能
    假设我们的模型只有一个参数\(w\),损失函数为\(L(w)\),加入L1和L2正则化后的损失函数分别记为\(J_1(w),J_2(w)\):\[\begin{gathered}J_1(w)=L(w)+\lambda|......