浅浅学习一下OpenSSL

这篇具有很好参考价值的文章主要介绍了浅浅学习一下OpenSSL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近一直不是在做安全相关的东西嘛,签名和加密都要用到秘钥,当时的秘钥都是师兄给我的。自己还没有生成过,于是这里来学习OpenSSL。

互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求)、数据完整性(没有被人修改过)、数据私密性(密文,无法直接读取)等。虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户端上依赖浏览器的正确实现,而且效率又很低,所以一般的敏感数据(如交易支付信息等)还是需要我们使用加密方法来手动加密。

1、OpenSSL是什么?

OpenSSL是一个开放源代码的SSL协议的产品实现,它采用C语言作为开发语言,具备了跨系统的性能,支持Linux、Unix、Windows、Mac和VMS等多种平台。(这玩意是一个软件产品)

OpenSSL最早的版本在1995年发布,1998年后开始由OpenSSL项目组维护和开发。当前最新的版本是0.9.7b版本,完全实现了对SSLv1、SSLv2、SSLv3和TLS的支持。目前,OpenSSL已经得到了广泛的应用,许多类型的软件中的安全部分都使用了OpenSSL的库,如VOIP的OpenH323协议、Apache服务器、Linux安全模块等等。

虽然OpenSSL使用SSL作为其名字的重要组成部分,但其实现的功能确远远超出了SSL协议本身。OpenSSL事实上包括了三部分:

  • SSL协议

  • 密码算法库

  • 应用程序库

  • 1、SSL协议部分完全实现和封装了SSL协议的三个版本和TLS协议,SSL协议库的实现是在密码算法库的基础上实现的。使用该库,你完全可以建立一个SSL服务器和SSL客户端。

  • 2、密码算法库是一个强大完整的密码算法库,它是OpenSSL的基础部分,也是很值得一般密码安全技术人员研究的部分,它实现了目前大部分主流的密码算法和标准。主要包括公开密钥算法、对称加密算法、散列函数算法、X509数字证书标准、PKCS12、PKCS7等标准。事实上,OpenSSL的SSL协议部分和应用程序部分都是基于这个库开发的。
    目前,这个库除了可以使用本身的缺省算法外,在0.9.6版本之后,还提供了Engine机制,用于将如加密卡这样外部的加密算法实现集成到OpenSSL中。

  • 3、应用程序部分是OpenSSL最生动的部分,也是OpenSSL使用入门部分。该部分基于上述的密码算法库和SSL协议库实现了很多实用和范例性的应用程序,覆盖了众多的密码学应用。主要包括了各种算法的加密程序各种类型密钥的产生程序(如RSA、Md5、Enc等等)、证书签发和验证程序(如Ca、X509、Crl等)、SSL连接测试程序(如S_client和S_server等)以及其它的标准应用程序(如Pkcs12和Smime等)。在某些时候,不需要做二次开发,仅仅使用这些应用程序便能得到我们的应用要求,比如采用Ca程序就能基本上实现一个小型的CA功能。(这就是我需要的,生成秘钥)

那么在知道OpenSSL是什么玩意之后,你的目的是什么? 是想集成它的算法库,还是实现SSL服务器,还是使用它的应用程序来实现你的目的。

那么无论是什么,下面我们来看看基于OpenSSL的应用。

2、基于OpenSSL的应用

基于OpenSSL指令的应用

基于OpenSSL指令的应用很容易,只要安装好了OpenSSL,就可以开始使用了。最简单的应用就是使用Req、CA以及X509指令来签发一个证书了,该证书可以用于各种目的,比如很多Apache服务器就是使用OpenSSL的指令生成的证书作为服务器证书。

基于OpenSSL加密库和协议库的应用

基于OpenSSL函数库的应用相比与基于OpenSSL指令的应用开发的工作量会大很多,但这并不意味着其应用会更少。事实上,基于OpenSSL的应用大部分是这种方式的,这种方式使得开发者能够根据自己的需求灵活地进行选择,而不必受OpenSSL有限的指令的限制。

到这里那必须整两个例子,这里我就不将基于库的应用进行展开讲了,整个CA证书和秘钥生成的例子。

3、OpenSSL的目录内容

openssl 入门,# 安全基础,ssl,安全,OpenSSL
openssl 入门,# 安全基础,ssl,安全,OpenSSL
openssl 入门,# 安全基础,ssl,安全,OpenSSL
openssl 入门,# 安全基础,ssl,安全,OpenSSL
openssl 入门,# 安全基础,ssl,安全,OpenSSL
openssl 入门,# 安全基础,ssl,安全,OpenSSL

4、两个例子:CA证书与秘钥生成

1-CA证书

CA的目录结构

openssl 入门,# 安全基础,ssl,安全,OpenSSL

  • certs目录:存放的是有效的用户证书,里面的文件格式是.cert格式,每一个用户对应一个证书。这些证书已经被CA签名了,是有效的。证书的具体格式在后面会有叙述和实例。

  • Crl目录:在这个目录中存放的是证书撤销列表,里面的文件格式是.crl格式。一个.crl文件记录了一段时期内被撤销的证书的序列号。所有这些撤销列表合起来记录了所有的被撤销的用户证书。证书撤销列表的具体格式见后面的分析。

  • newcerts:在这个目录中存放的是那些等待被CA签名的用户证书,这些证书还是没有被签名的,暂时无效。不过这些用户的申请信息已经告知了CA系统,系统管理员可以通过对这些信息的分析,决定是否对这个证书签名,使其生效。

  • private:这个目录中存放的是所有用户包括CA的私钥,里面的文件格式是.key格式的。每一个证书对应一个.key文件。这个目录起到一个简单的密钥归档作用。

1.1 创建CA的准备工作

  • 1、创建一个数据库( index.txt文件)

    • 记录根CA创建证书或者撤销证书的事件;
    • 每次创建或者撤销证书事件发生时,它是自动更新的;
  • 2、创建一个序列号(serial)文件

    • 记录下次即将创建的用户证书的序列号;
    • 每次创建一个新证书时,将其中的序列号赋给证书;
    • 证书创建完成后,自动将序列号加1;
    • 根证书的序列号默认为00;

1.2 创建CA证书的基本步骤

  • 1、在原来创建的. rnd文件中输入一个数做为伪随机数发生器的种子;
  • 2、利用1中的种子和RSA算法为CA生成一个CA密钥对;
  • 3、申请创建CA证书,输入系统要求的必要的注册信息;系统会用2中生成的CA密钥对对这个证书进行自签名;
  • 4、安装生成的CA证书,即让本机信任这个CA证书;

1.3 生成CA密钥对

命令:

genrsa -out private\ca.key -rand privatel\.rnd 2048

openssl 入门,# 安全基础,ssl,安全,OpenSSL
生成的密钥对存放在ca.key中。

生成密钥对命令的详细解释:

  • genrsa:用RSA算法产生(gen)密钥对;

  • -out privatelca.key:生成的密钥对存放(-out)在private目录下的ca.key文件中;

  • -rand privatel.rnd:在RSA算法中,伪随机数产生器用的种子是放在private.rnd中的;里面的种子管理员可以手动修改;

  • 2048:表示生成的密钥长度是2048位的。

    显然,上面的.key文件是明文保存的,是很不安全的。而密钥一旦泄漏,响应的证书也就失效。所以CA提供了一个可选配置,通过配置,使得每次生成一个新的密钥对的时候,必须用一个口令对响应的.key文件进行加密(加密算法是DES)。这在一定程度上提高了系统的可靠性。

1.4创建CA证书(自签名)

命令格式:

C:\CARoot \ req -new -x509 - days 3650 -key private\ca.key -out private\ca.crt -config openssl.cnf

openssl 入门,# 安全基础,ssl,安全,OpenSSL
命令详细解释:

  • req -new -x509:申请(req)一个新的(new)的x509证书;
    • days 3650:证书的有效期是3650天。一般CA证书的有效期较长,而用户证书的有效期相对来说较短;
  • -key private \ca. key:对这个证书进行签名的CA密钥存放在private\ca. key中(我们上一步产生CA密钥对的时候就是放在这里的);
  • -out private\ca.crt:生成的证书放在(-out)private目录下,证书的名字是ca.crt;
  • -config openssl.cnf:产生证书的时候采用的配置策略,里面可能包括证书的版本信息、扩展信息等。

1.5 CA证书的详细内容

  • 版本(V3)
  • 序列号(00)
  • 加密算法(RSA、MD5)
  • 有效期(2005年5月24日至2015年5月22日)●公钥
  • 自签名(2048位)●颁发者
  • 证书申请者信息(注册过程中的全部信息)

(还有个生成用户证书的,这里就不展示了)

2-秘钥生成

1. 生成私钥

 openssl genrsa -out ../mycerts/rsa_private_key.pem 2048 生成rsa私钥,文本存储格式,长度2048

如果你想将PEM格式的私钥文件rsa_private_key.pem转成PEM格式的不加密的私钥文件

OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

2. 根据私钥生成对应的公钥

openssl rsa -in ../mycerts/rsa_private_key.pem -pubout -out ../mycerts/rsa_public_key_2048.pub 

3. 私钥转化成pkcs8格式

 openssl pkcs8 -topk8 -inform PEM -in ../mycerts/rsa_private_key.pem outform PEM -nocrypt > ../mycerts/rsa_private_key_pkcs8.pem 

生成的结果就是

rsa_private_key.pem
rsa_public_key.pem

4、相关参数

genrsa命令相关参数
【genrsa】
-out filename:将生成的私钥保存至filename文件,若未指定输出文件,则为标准输出。
numbits:指定要生成的私钥的长度,默认为1024。该项必须为命令行的最后一项参数。
-des:生成的密钥使用des方式进行加密。
-des3:生成的密钥使用des3方式进行加密。
-passout args:加密私钥文件时,传递密码的格式,如果要加密私钥文件时单未指定该项,则提示输入密码。传递密码的args的格式,可从密码、环境变量、文件、终端等输入。
      a.pass:password:password表示传递的明文密码
      b.env:var:从环境变量var获取密码值
      c.file:filename:filename文件中的第一行为要传递的密码。若filename同时传递给"-passin"和"-passout"选项,则filename的第一行为"-passin"的值,第二行为"-passout"的值
      d.stdin:从标准输入中获取要传递的密码


pkcs8相关参数
【pkcs8】
-inform PEM|DER::输入文件格式,DER或者PEM格式。DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式。
-outform DER|PEM:输出文件格式,DER或者PEM格式。
-in filename:输入的密钥文件,默认为标准输入。如果密钥被加密,会提示输入一个密钥口令。
-passin arg:输入文件口令保护来源。
-out filename:输出文件,默认为标准输出。如果任何加密操作已经执行,会提示输入一个密钥值。输出的文件名字不能和输入的文件名一样。
-passout arg:输出文件口令保护来源。
-topk8:通常的是输入一个pkcs8文件和传统的格式私钥文件将会被写出。设置了此选项后,位置转换过来:输入一个传统格式的私钥文件,输出一个PKCS#8格式的文件。
-noiter:MAC保护计算次数为1。
-nocrypt:PKCS#8密钥产生或输入一般用一个适当地密钥来加密PKCS#8 EncryptedPrivateKeyInfo结构。设置了此选项后,一个不加密的PrivateKeyInfo结构将会被输出。这个选项一直不加密私钥文件,在绝对必要的时候才能够使用。某些软件例如一些JAVA代码签名软件使用不加密的私钥文件。
-nooct:这个选项产生的RSA私钥文件是一个坏的格式,一些软件将会使用。特别的是,私钥文件必须附上一个八位组字符串,但是一些软件仅仅包含本身的结构体没有使八位组字符串所环绕。不采用八位组表示私钥。
-embed:这个选项产生的RSA私钥文件是一个坏的格式。在私钥结构体中采用嵌入式DSA参数格式。在这个表单中,八位组字符串包含了ASN1 SEQUENCE中的两种结构:一个SEQUENCE包含了密钥参数,一个ASN1 INTEGER包含私钥值。
-nsdb:这个选项产生的RSA私钥文件是一个坏的格式并兼容了Netscape私钥文件数据库。采用NetscapeDB的DSA格式。
-v2 alg:采用PKCS#5 v2.0,并指定加密算法,默认的是PKCS#8私钥文件被叫做B<pbeWithMD5AndDES-CBC>(该算法用56字节的DES加密但是在PKCS#5 v1.5中有更加强壮的加密算法)的加密算法用口令进行加密。用B<-v2>选项,PKCS#5 v2.0相关的算法将会被使用,可以是des3(168字节)和rc2(128字节),推荐des3。
-v1 alg:采用PKCS#5 v1.5或pkcs12,并指定加密算法。可采用的算法见下面。

rsa相关参数
【rsa】
-inform PEM|NET|DER:输入文件格式,DER、PEM以及NET格式。DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式。NET是为了和老的netscape server以及IIS兼容才弄出来的。他使用没有被salt过的RC4做加密算法,加密强度很底,如果不是一定要用就别用。
-outform PEM|NET|DER:输出文件格式,DER、PEM以及NET格式。同inform。
-in filename:输入的RSA密钥文件,默认为标准输入。
-out filename:RSA密钥输出文件,默认为标准输出。
-passin arg:指定私钥包含口令存放方式。比如用户将私钥的保护口令写入一个文件,采用此选项指定此文件,可以免去用户输入口令的操作。比如用户将口令写入文件“pwd.txt”,输入的参数为:-passin file:pwd.txt。
-passout arg:输出文件口令保护存放方式。
-sgckey:该选项是配合NET格式的私有密钥文件的一个选项。
-text:打印所有信息。
-noout:不打印信息。
-modulus:打印公钥信息。
-check:检查公司约是否匹配。
-pubin:设置此选项后,从输入文件中读取公钥值,默认读取的是私钥值。
-pubout:设置此选项后,保存公钥值到输出文件中,默认的是保存私钥值到输出文件中。
-engine id:指定引擎。
Ø  -des ,-des3, -idea, -aes128, -aes192, -aes256,-camellia128, -camellia192, -camellia256:指定的私钥保护加密算法。

参考链接:文章来源地址https://www.toymoban.com/news/detail-723774.html

  • 1、https://wenku.baidu.com/view/6a274407cc175527072208df?fr=text_ernie_recall%3Awk_recommend_main3-TopList_highScoreList-pcview_toplistrec_highscore_wk_recommend_main3-0e8f642dbd64783e09122b34&wkts=1675865285087&bdQuery=OpenSSL%E4%BD%BF%E7%94%A8
  • 2、https://wenku.baidu.com/view/0e8f642dbd64783e09122b34.html?fr=aladdin664466&ind=1&wkts=1675864390660&bdQuery=OpenSSL%E4%BD%BF%E7%94%A8
  • 3、https://blog.csdn.net/my_miuye/article/details/123151834

到了这里,关于浅浅学习一下OpenSSL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何学习网络安全?(零基础入门网络安全学习笔记)

    概括来说,网络安全课程的主要内容包括: 安全基本知识 应用加密学 协议层安全 Windows安全(攻击与防御) Unix/Linux安全(攻击与防御) 防火墙技术 入侵监测系统 审计和日志分析 下面分别对每部分知识介绍相应的具体内容和一些参考书。 一、安全基本知识 这部分的学习过

    2024年02月11日
    浏览(45)
  • 网络安全—0基础入门学习手册

     前言 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。     无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如 Web 安全技术,既有

    2024年02月09日
    浏览(44)
  • 零基础想学习 Web 安全,如何入门?

    想学习 Web 安全,如何入门? 1.我真的喜欢搞安全吗? 2.我想通过安全赚钱钱? 3.我不知道做什么就是随便? 4.一辈子做安全吗 这些不想清楚会对你以后的发展很不利,与其盲目的学习 web 安全,不如先做一个长远的计划。否则在我看来都是浪费时间。 Web 分为好几层,一图胜千言

    2024年02月03日
    浏览(58)
  • 网络安全|渗透测试入门学习,从零基础入门到精通—收集信息篇

    目录 前面的话 1、收集域名信息 1.1、Whois查询 ​编辑1.2、备案信息查询  2、收集敏感信息 3、收集子域名信息 3.1、子域名检测工具 3.2、搜索引擎枚举 3.3、第三方聚合应用枚举 3.4、证书透明度公开日志枚举 本章小结 本人喜欢网络完全的一些知识,自学一些。现在写出来和大

    2024年02月08日
    浏览(51)
  • 【零基础入门学习Python---Python中安全编程和测试之快速入门实践】

    🚀 零基础入门学习Python🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题

    2024年02月12日
    浏览(56)
  • 【网络安全入门】学习网络安全必须知道的100 个网络基础知识

    什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2 OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。 3 什么是骨干网? 骨干网络是集中的基础设施,旨在将

    2024年02月08日
    浏览(50)
  • 零基础如何学习 Web 安全,如何让普通人快速入门网络安全?

    前言 网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 【一一帮助安全学习(网络安全面试题+学习路线+视频教程+工具)一一】 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多

    2024年02月12日
    浏览(63)
  • 零基础如何学习Web 安全,如何让普通人快速入门网络安全?、

    网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大厂也都会要网络安全人员,后续法律也会改革,网络安全只会

    2024年04月22日
    浏览(56)
  • 网络安全入门学习第九课——计算机网络基础

    1.1、公网地址的范围 A类:地址范围1.0.0.0~127.255.255.255,主要分配给主机数量多、局域网数量少的大型网络; B类:地址范围为128.0.0.0至191.255.255.255,一般为国际大公司及政府机构使用; C类:地址范围为192.0.0.0至223.255.255.255,为一般小型公司校园网研究机构; 1.2、私网地址的范围 A类

    2024年02月08日
    浏览(52)
  • web渗透安全学习笔记:1、入门基础知识/ XXS漏洞

        自编写python渗透工具编写学习笔记专栏以来,笔者便发现了一个较为严重的问题:我们大多数文章都是学习如何用python编写扫描与利用漏洞的渗透工具,却没有真正解析漏洞的形成原因,长此以往我们的学习就只会浮于表面,广而不深。为了改变这一现状,笔者决定以深

    2024年02月03日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包