openssl命令详解-程序员宅基地

技术标签: Linux运维  

OpenSSL 是一个开源项目,其组成主要包括一下三个组件:

  • openssl:多用途的命令行工具
  • libcrypto:加密算法库
  • libssl:加密模块应用库,实现了ssl及tls

1、对称加密

对称加密需要使用的标准命令为 enc ,用法如下:

openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
       [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
       [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]

常用选项有:

-in filename:指定要加密的文件存放路径

-out filename:指定加密后的文件存放路径

-salt:自动插入一个随机数作为文件内容加密,默认选项

-e:可以指明一种加密算法,若不指的话将使用默认加密算法

-d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致

-a/-base64:使用-base64位编码格式

示例
加密:openssl enc -e -des3 -a -salt -in fstab -out fstab.des3
解密:openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab
2、单向加密
单向加密需要使用的标准命令为 dgst ,用法如下:
openssl dgst [-sha|-sha1|-mdc2|-ripemd160|-sha224|-sha256|-sha384|-sha512|-md2|-md4|-md5|-dss1] [-c]
 [-d] [-hex] [-binary] [-r] [-non-fips-allow] [-out filename] [-sign filename] [-keyform arg] [-passin
 arg] [-verify filename] [-prverify filename] [-signature filename] [-hmac key] [-non-fips-allow]
 [-fips-fingerprint] [file...]
[root@shitouji shitou]# openssl dgst -md5 test.txt > a
[root@shitouji shitou]# cat a
MD5(test.txt)= f19eb8db94696d22661367d5c8d8cad7

3、生成密码

生成密码需要使用的标准命令为 passwd ,用法如下:

openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}

常用选项有:

-1:使用md5加密算法

-salt string:加入随机数,最多8位随机数

-in file:对输入的文件内容进行加密

-stdion:对标准输入的内容进行加密

默认是加了salt的,如果没有指定,salt值是随机的,所以即使密码一样,生成的加密也是不一样的

4、生成随机数

生成随机数需要用到的标准命令为 rand ,用法如下:

openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num

常用选项有:

-out file:将生成的随机数保存至指定文件中

-base64:使用base64 编码格式

-hex:使用16进制编码格式

[root@shitouji shitou]# openssl rand -base64 10 -out test.txt
[root@shitouji shitou]# cat test.txt

5、生成秘钥对

首先需要先使用 genrsa 标准命令生成私钥,然后再使用 rsa 标准命令从私钥中提取公钥。

genrsa 的用法如下:

openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]

常用选项有:

-out filename:将生成的私钥保存至指定的文件中

-des|-des3|-idea:不同的加密算法

numbits:指定生成私钥的大小,默认是2048

一般情况下秘钥文件的权限一定要控制好,只能自己读写,因此可以使用 umask 命令设置生成的私钥权限,示例如下:

ras 的用法如下:

openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
       [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]

常用选项:

-in filename:指明私钥文件

-out filename:指明将提取出的公钥保存至指定文件中

-pubout:根据私钥提取出公钥

6、CA和证书

最主要的步骤:生成一对密钥和自签署证书

生成私钥

[root@shitouji CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

生成公钥

openssl req用来生成自签证书

主要命令选项:

     -new    :说明生成证书请求文件

     -x509   :说明生成自签名证书

     -key    :指定已有的秘钥文件生成秘钥请求,只与生成证书请求选项-new配合。

     -newkey :-newkey是与-key互斥的,-newkey是指在生成证书请求或者自签名证书的时候自动生成密钥,

              然后生成的密钥名称由-keyout参数指定。[-newkey rsa:bits]当指定newkey选项时,后面指定rsa:bits说明产生

              rsa密钥,位数由bits指定。 如果没有指定选项-key和-newkey,默认自动生成秘钥。

     -out    :-out 指定生成的证书请求或者自签名证书名称

     -config :默认参数在ubuntu上为 /etc/ssl/openssl.cnf, 可以使用-config指定特殊路径的配置文件

     -nodes  :如果指定-newkey自动生成秘钥,那么-nodes选项说明生成的秘钥不需要加密,即不需要输入passphase.

     -text   :以文本的方式读取证书信息

     -batch  :指定非交互模式,直接读取config文件配置参数,或者使用默认参数值

[root@shitouji CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem  #申请自签证书

[root@shitouji CA]#touch index.txt #创建一个index.txt

openssl.cnf配置文件主要说明

dir     = /etc/pki/CA    /* Where everything is kept */
                         /*  #### 这是第一个openssl目录结构中的目录 */
certs       = $dir/certs /* Where the issued certs are kept(已颁发的证书路径,即CA或自签的) */
                         /* #### 这是第二个openssl目录结构中的目录,但非必须 */
crl_dir     = $dir/crl   /* Where the issued crl are kept(已颁发的crl存放目录) */
                         /*  #### 这是第三个openssl目录结构中的目录*/
database    = $dir/index.txt /* database index file */
#unique_subject = no     /* 设置为yes则database文件中的subject列不能出现重复值 */
                         /* 即不能为subject相同的证书或证书请求签名*/
                         /* 建议设置为no,但为了保持老版本的兼容性默认是yes */
new_certs_dir = $dir/newcerts /* default place for new certs(将来颁发的证书存放路径) */
                             /* #### 这是第四个openssl目录结构中的目录 */
certificate = $dir/cacert.pem  /* The A certificate(CA自己的证书文件) */
serial      = $dir/serial      /* The current serial number(提供序列号的文件)*/

1、问题描述:做证书签证时出现下面问题
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
The mandatory stateOrProvinceName field was missing
2、出现原因:openssl.cnf中CA policy有三个match,必须要填一样的,或者改成optional
3、解决方法:修改配置文件,修改后为:

# For the CA policy
[ policy_match ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/minioesina/article/details/88145581

智能推荐

完整版:献给初学者的Java学习方法-程序员宅基地

文章浏览阅读77次。2019独角兽企业重金招聘Python工程师标准>>> ..._java给初学者最好理解的讲义

L2D1 linux下deb包管理及常用shell命令_在debin包rules中嵌入shell命令-程序员宅基地

文章浏览阅读661次。主要是学习了linux下软件包的离线安装和在线安装方法,以及依赖修复和软件在线更新,还讲了linux基本命令和特殊命令,特殊命令主要是管道和命令置换。_在debin包rules中嵌入shell命令

魔方机器人01 kociemba安装和使用-程序员宅基地

文章浏览阅读6.3k次,点赞11次,收藏57次。等不了开学了,今天耐不住性子开始用现有资源把魔方机器人前期准备起来。本方案使用编程语言为python3.整体方案OpenCV完成图像识别并输出魔方状态字符串使用现有的kociemba包解算理论步骤将理论步骤转换为机械执行的步骤步进电机执行机械步骤大概就是这样,摸着石头过河kociemba包的使用先用anaconda搭建一下环境,安装好kociemba包。kociemba包下..._kociemba

软件项目管理 3.2.预测生存期模型_预测型生存期模型-程序员宅基地

文章浏览阅读4.4k次。软件项目管理 3.2.预测生存期模型【公众号 “项目管理研究所” 将会第一时间更新文章】 归档于软件项目管理初级学习路线第三章 生存期模型《初级学习路线合集 》前言大家好,这节我们学习预测生存期模型,预测模型是一种传统模型,项目具有高确定性和很明确的需求,项目活动通常以顺序的方式执行,没有反馈。预测型模型主要有瀑布模型和V模型。一、瀑布模型瀑布模型是最经典,最传统的模型,他严格的要求项目按照秩序来执行,单向的如同瀑布一样,只能从上往下,不能返回,编码阶段不能执行修改需求和设计。瀑布模型_预测型生存期模型

实验11-1-6 指定位置输出字符串 (20 分)_6-7 指定位置输出字符串 分数 20 作者 c课程组 单位 浙江大学 本题要求实现一个函数,对给定-程序员宅基地

文章浏览阅读1.6k次。本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。函数接口定义:char *match( char *s, char ch1, char ch2 );函数match应打印s中从ch1到ch2之间的所有字符,并且返回ch1的地址。裁判测试程序样例:#include <stdio.h>#define MAXS 10char *match( char *s, char ch1, char ch2_6-7 指定位置输出字符串 分数 20 作者 c课程组 单位 浙江大学 本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。 函数接口定义: char *match( char *s, char ch1, char ch2 );

基于X5内核的UI自动化_微信x5内核 ui自动化-程序员宅基地

文章浏览阅读2k次。前言最近无论是在微信、QQ浏览器、微信小程序还是加载X5内核的页面进行UI自动化,都会遇到X5内核自动化问题,这篇进行一个问题的总结。基础介绍1、什么是X5内核?X5内核是腾讯基于优秀开源Webkit深度优化的浏览器渲染引擎,搭载在最新一代的手机QQ浏览器上,更快,更便捷。 --百度百科2、什么是webview?Webview是用来展示网页的view组件,使用web..._微信x5内核 ui自动化

随便推点

豆沙绿色值---全_豆沙绿参数-程序员宅基地

文章浏览阅读6.9k次。豆沙绿的参数为:a. RGB颜色:(199,237,204)b. 十六位颜色代码:C7EDCCc. 色调(Hue)85、饱和度(Sat)123、亮度(Lum)205------------- The End -------------许可协议: 转载请保留原文链接及作者。..._豆沙绿参数

HBase在微博搜索业务中的应用-程序员宅基地

文章浏览阅读1k次。在社交媒体平台的发展过程中,越来越多的人依赖于微博进行信息的传播、分享。不仅如此,微博作为新浪等知名门户网站的基础服务,有着独特的特性。比如,它是一个高度互联网化的信息流通工具,用户可以自由的发布或转发微博内容,并且具有大量的搜索功能。因此,为微博搜索服务提供更加高效、精准的结果,帮助用户找到想要的内容,也成为各大互联网公司关注的一个重点方向。在微博搜索服务中,通常会采用基于搜索引擎的关键词匹配方式,通过检索用户输入的关键字,返回包含相关主题信息的微博条目。

centos6安装并配置zabbix3.2_centos6配置zabbix-程序员宅基地

文章浏览阅读274次。1.安装PHPZabbix 3以后对PHP的要求最低为5.4,而CentOS6默认为5.3.3,完全不满足要求,故需要利用第三方源,将PHP升级到5.4以上,注意,不支持PHP7rpm -ivh http://repo.webtatic.com/yum/el6/latest.rpmyum install -y php56w php56w-gd php56w-mysql php56w-bcma..._centos6配置zabbix

Sqoop常用命令及参数_sqoop参数-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏16次。目录一、常用命令列举二、命令&参数详解1、公用参数:数据库连接2、公用参数:import3、公用参数:export4、公用参数:hive5、命令&参数:import6、命令&参数:export7、命令&参数:codegen8、命令&参数:create-hive-table9、命令&参数:eval10、命令&参数:import-all-tables11、命令&参数:job12、命令&_sqoop参数

IntelliJ IDEA文件变了颜色,原来是这个原因!!_idea文件名绿色怎样改回来-程序员宅基地

文章浏览阅读3w次,点赞6次,收藏30次。前天将这些文件提交到了github,今天打开,新建文件,发现文件变了颜色(不是报错!可以编译运行),原来是这个原因!解析我上网查了一下:现在记录其实,这主要和你的版本控制工具相关绿色,已经加入控制暂未提交红色,未加入版本控制蓝色,加入,已提交,有改动白色,加入,已提交,无改动灰色:版本控制已忽略文件。图片描述如何在ide修改?些文件名的颜色都是可以修改的,颜色的意义是..._idea文件名绿色怎样改回来

pycharm报错:AttributeError: module ‘torch._C‘ has no attribute ‘_cuda_setDevice‘-程序员宅基地

文章浏览阅读3.8k次。原因:pytorch没有配置GPU/CUDA(若已经安装并配置GPU+CUDA)到pytorch官网安装适合的版本:https://pytorch.org/get-started/locally/将最底层的 Run this Command复制,到pycharm的终端运行。