使用OpenSSL实现证书操作
使用OpenSSL实现证书操作
伴随着计算机的发展,计算机的安全问题也一直困扰着我们,在现代社会计算机信息安全更显得格外的重要,如今的社会是一个信息的社会,你我每天都在使用计算机,随着电子邮件、社区网游、即使通讯、电子商务等应用的发展,我们的私人信息也在通过各种网络设备在互联网上被传递,如何才能保障这些私人信息的安全是我们所要关心的。
对重要的数据如银行帐号我们可以使用加密技术加密我们的数据,然后再通过网络传递这些信息,现代加密技术通常被分为:对称加密技术和对对称加密技术。
其中对称加密技术的特点是:
1.加密与解密使用的是同一把钥匙;
2.由加密密钥可以推到出解密密钥,有解密密钥同样可以推断出加密密钥;
3.数据加密速度相对非对称加密技术较快。
非对称加密技术的特点是:
1.加密与解密使用两把不同的钥匙;
2.通过加密密钥不可能(有效时间内)推到出解密密钥,由解密密钥也不可能(有效时间内)推到出加密密钥;
3.与对称加密技术相比数据加密速度较慢。
注:公钥用来加密,私钥用来解密,公钥可以公开到互联网上被任何人使用,因为通过公钥无法推导出私钥。
由此我们可能很快就会判断我们需要对称加密技术加密我们在互联网中的数据,因为她简单且速度很快。如果你真的选择了这种解决方案,你会发现另外的一个非常严重的问题。即:如果互联网上通讯双方要想彼此通讯的话,就必须要提起协商一个加密与解密的密钥才可以,那么你的密钥要如何通过网络传递出去呢?如果使用加密传递出去,但是对方并不知道解密的方法,如果使用明文传递密钥,而此时正好有一名***通过互联网监听你的信息,那么这名监听者同样获得了以的密钥,这不是很可怕!
此时我们的一个合理的解决方案是:使用;非对称加密技术加密我们准备使用的对称加密的密钥,即:使用非对称加密技术的公钥加密我们准备要使用的对称加密技术的密钥,对方收到后再使用私密解密,这样双方都有了对称加密的密钥,快速的加密我们的数据,而加密真是数据用的非常重要的密钥;由于是使用非对称加密技术传输的所以也同样的安全!
到此我们的问题好像是都解决了,我们先假设一个环境:爱丽丝现在需要和鲍勃通过网络沟通公司的机密信息。按照我们知道的,爱丽丝现在需要一把密钥加密公司的机密文件,而鲍勃如果想打开该文件的话同样需要这把密钥。于是爱丽丝生成了一把对称加密技术的密钥,用来加密公司数据文件,同时为了让鲍勃可以阅读该文件,爱丽丝需要鲍勃生成一对非对称的公钥和私钥密钥对,鲍勃把自己的公钥发给爱丽丝,于是爱丽丝使用鲍勃发来的公钥加密了自己用来加密公司文件的对称密钥,同时把使用对称加密技术加密后的文件发给了鲍勃,鲍勃接受到文件后,先使用自己的私钥解密;爱丽丝的用于机密公司文件的密钥,然后使用解密除了的密钥;解密公司文件。看上去很完美!
如何在互联网上有一名不怀好意者,他自己也生成了一对非对称密钥,或偷取了鲍勃的非对称密钥,并把公钥发给爱丽丝,并声称自己是鲍勃,结果会怎么样呢?
很显然,我们没有办法知道互联网上某个公钥或私钥是否就是该持有人的真实身份。证书就是用来建立持有人与证书直接关系的技术。就想我们的×××,×××对应你本人,你本人同样对应这唯一的×××,如果有谁怀疑的话,可以去公安机关去证实这个×××的真伪!(完美)
要想使用证书我们这里需要几个关键因素:
1.验证机构(CA认证机构),这里CA是一个权威的机构。
2.实体个人(私钥,仅个人持有)
3.验证机制。
流程:个人生成密钥对,用户把自己的信息与公钥一起发给CA机构验证,申请属于自己的证书,当证书通过申请后即可在互联网上使用该证书。
OpenSSL提供了建立证书所需要的所有命令:req命令是证书申请工具。ca命令用于接受证书请求、审核证书请求、签发证书、吊销证书等管理证书的工具命令。
下面我们分别来看看这两个命令的使用:
一、证书请求:req
req [options] infile outfile
where options are
-inform arg input format - DER or PEM (输入证书请求文件的格式,DER或PEM格式,输入证书请求文件的目的是验证证书或显示证书内容)
-outform arg output format - DER or PEM (输出证书请求或自签名证书编码格式)
-in arg input file (输入一个已经存在的证书请求文件,可以配合x509选择生成自签名证书)
-out arg output file (输出文件名,可以输出证书请求、自签名证书、公钥等)
-text text form of request (输出证书请求或自签名根证书的明文内容,默认情况下将输出所有的明文信息)
-pubkey output public key (输出公钥到out选项指定的文件中)
-noout do not output REQ (不输出任何信息到文件)
-verify verify signature on REQ (对证书请求的数字签名进行验证)
-modulus RSA modulus
-nodes don't encrypt the output key (不加密输出的密钥)
-engine e use engine e, possibly a hardware device (使用第三方设备加密设备)
-subject output the request's subject (输出主机名信息)
-passin private key password source (读取私钥文件所需要的口令)
-key file use the private key contained in file (指定一个已存在的私钥文件)
-keyform arg key file format (指定密钥文件格式)
-keyout arg file to send the key to (私钥输出文件名)
-rand file:file:... (随机数文件)
load the file (or the files in the directory) into
the random number generator
-newkey rsa:bits generate a new RSA key of 'bits' in size (生成新的密钥,RSA代表使用RSA算法对密钥进行加密,bits表示密钥长度)
-newkey dsa:file generate a new DSA key, parameters taken from CA in 'file' (生成新的密钥,DSA代表使用DSA算法对密钥进行加密,bits表示密钥长度)
-[digest] Digest to sign with (md5, sha1, md2, mdc2, md4) (使用信息摘要算法,一般在数字签名时使用)
-config file request template file. (指定证书请求时所需的OpenSSL配置文件)
-subj arg set or modify request subject (通过命令行输入用户信息)
-multivalue-rdn enable support for multivalued RDNs
-new new request. (执行新的证书请求操作)
-batch do not ask anything during request generation (生成证书请求时不提示输入任何信息)
-x509 output a x509 structure instead of a cert. req. (输出x509结构的自签名根证书)
-days number of days a certificate generated by -x509 is valid for. (x509证书的有效期)
-set_serial serial number to use for a certificate generated by -x509. (设置x509证书的序列号)
-newhdr output "NEW" in the header lines (在证书请求行首输入NEW字段)
-asn1-kludge Output the 'request' in a format that is wrong but some CA's
have been reported as requiring
-extensions .. specify certificate extension section (override value in config file) (特殊的证书扩展字段)
-reqexts .. specify request extension section (override value in config file) (特殊的证书请求的扩展字段)
-utf8 input characters are UTF8 (default ASCII) (输入utf8编码的字符,默认是ASCII编码)
-nameopt arg - various certificate name options
-reqopt arg - various request text options
案例:
1.openssl req -key privkey.pem -passin pass:111111 -new -out request.pem
使用一个已存在的密钥生成证书请求文件(注:privkey是已存在的私钥文件,111111是该私钥的口令,关于如何生成非对称密钥对,你可以查看博客中的其他文章)
2.openssl req -newkey rsa:1024 -keyout privekey.pem -passout pass:111111 -out request.pem
生成一份新的1024位的私钥privekey.pem,再使用该私钥生成一份证书请求文件request.pem。
3.openssl req -new -x509 -key privekey.pem -passin pass:11111 -out cert.cer
使用已存在的密钥privekey.pem,生成一份自签名的根证书cert.cer。
*********************************************************************************************************
二、证书管理命令:CA
usage: ca args
-verbose - Talk alot while doing things (输出操作过程的详细信息)
-config file - A config file (指定OpenSSL配置文件)
-name arg - The particular CA definition to use (指定配置文件中的CA配置字段)
-gencrl - Generate a new CRL (生成一份CRL(证书吊销列表))
-crldays days - Days is when the next CRL is due (CRL有效期,天)
-crlhours hours - Hours is when the next CRL is due (CRL有效期,小时)
-startdate YYMMDDHHMMSSZ - certificate validity notBefore (证书生效日期)
-enddate YYMMDDHHMMSSZ - certificate validity notAfter (overrides -days) (证书到期日期)
-days arg - number of days to certify the certificate for (证书有效天数)
-md arg - md to use, one of md2, md5, sha or sha1 (使用信息摘要算法)
-policy arg - The CA 'policy' to support (指定匹配字段)
-keyfile arg - private key file (指定用于签发证书请求的私钥文件)
-keyform arg - private key file format (PEM or ENGINE) (私钥格式)
-key arg - key to decode the private key if it is encrypted (指定私钥口令)
-cert file - The CA certificate (指定用于签发证书请求的证书文件)
-selfsign - sign a certificate with the key associated with it (自签名证书)
-in file - The input PEM encoded certificate request(s) (指定要输入的证书请求文件)
-out file - Where to put the output file(s) (输出签发好的证书或生成的CRL文件)
-outdir dir - Where to put output certificates (证书或CRL的输出目录)
-infiles .... - The last argument, requests to process (作为最后一个选项使用,指定多个证书请求文件,而不是前面in选项指定的一个证书请求文件)
-spkac file - File contains DN and signed public key and challenge (包括DN和公钥的证书请求文件)
-ss_cert file - File contains a self signed cert to sign (自签名证书)
-preserveDN - Don't re-order the DN (不重新对证书主体名称的内容进行排序)
-noemailDN - Don't add the EMAIL field into certificate' subject (去除证书请求中的Email信息)
-batch - Don't ask questions (不提示输入信息而直接签发证书)
-msie_hack - msie modifications to handle all those universal strings
-revoke file - Revoke a certificate (given in file) (吊销一份证书文件)
-subj arg - Use arg instead of request's subject (重新填写证书请求的用户信息)
-utf8 - input characters are UTF8 (default ASCII) (输入utf8格式编码文件)
-multivalue-rdn - enable support for multivalued RDNs
-extensions .. - Extension section (override value in config file) (使用扩展字段)
-extfile file - Configuration file with X509v3 extentions to add (使用扩展字段)
-crlexts .. - CRL extension section (override value in config file)
-engine e - use engine e, possibly a hardware device.
-status serial - Shows certificate status given the serial number (显示证书状态)
-updatedb - Updates db for expired certificates (更新证书库数据)
案例:
1.openssl ca -in request.pem -out cert.cer
使用前面req生成的证书请求文件作为输入,签发一份证书文件(cert.cer)
2.openssl ca -revoke cert.cer
吊销一份证书文件
3.openssl ca -updatedb
更新证书数据库
转载于:https://blog.51cto.com/manual/788691
使用OpenSSL实现证书操作相关推荐
- PHP的OpenSSL加密扩展学习(三):证书操作
PHP的OpenSSL加密扩展学习(三):证书操作 关于对称和非对称的加密操作,我们已经学习完两篇文章的内容了,接下来,我们就继续学习关于证书的生成. 生成 CSR 证书签名请求 CSR 是用于生成证 ...
- Openssl生成证书流程
Openssl生成证书流程 偶然想到在内网配置https,就梳理了下利用openssl与ca生成证书的过程. 生成过程分为服务端跟客户端,这里我在一台上测试. 一.介绍 CA是Certificate ...
- openssl生成证书linux,linux中openssl生成证书和自签证书linux操作系统 -电脑资料
下面来给大家介绍关于linux中openssl生成证书和自签证书的例子,整个过程都讲述的非常详细有兴趣的朋友可进入参考, 1.首先要生成服务器端的私钥(key文件):代码如下复制代码 openssl ...
- SSL数字证书(三)使用 openssl 生成证书
数字证书原理(〇)认识SSL SSL数字证书(一)CA.根证书与数字证书 SSL数字证书(二)使用makecert.exe签发证书 SSL数字证书(三)使用 openssl 生成证书 转载自<使 ...
- Apache OpenSSL生成证书使用
最近在学习SSL协议,这次是基于Apache服务器自带的openssl来实现的 TLS:传输层安全协议 SSL:安全套接字层 KEY:私钥 CSR:证书签名请求,即公钥,生成证书时需要将此提交给证书机 ...
- [教程]openssl中证书生成、签发,CRL,密钥转换等命令最简教程(可直接跳到后文)
前言 0.OPENSSL 什么是openssl? OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份.这个包广泛被应用在互联网的网页服 ...
- 如何利用OpenSSL生成证书
此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.前言 最近为了测试内容分发网络(Content Delivery Network,简称 CDN)添加的新功 ...
- Nginx使用openssl生成证书文件
方式二:使用openssl生成证书 先要确认当前系统是否有安装openssl openssl version 安装下面的命令进行生成 mkdir /root/cert cd /root/cert op ...
- windows下OpenSSL加密证书安装步骤与使用方法
OpenSSL加密证书一般用于签名认证,含私钥和公钥.在Linux系统中,OpenSSL一般是已经安装好了,可以直接使用.而在Windows系统中,是需要安装使用的. 最近在使用支付平台时,用到了Op ...
最新文章
- android中完全退出当前应用程序的四种方法
- boost::log::ipc::reliable_message_queue用法的测试程序
- 1.2.4 Selecting a defualt database
- SPList和SPDocumentLibrary 通过代码更新审批状态
- nand ubi -3 uboot和ubi
- django mysql 创建表_关于 django ORM 中,数据库建表方式的问题
- c语言gets与fgetc,区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets 转
- 深度优化LNMP之MySQL
- 作为一个程序员,hibernate和jdbc 有什么不一样的点,你知道吗
- 谁说“IT 不理解 OT”?开放自动化来破局!
- [HTML] 表单和输入
- numpy中的broadcast
- 南航的计算机专业好考吗,南航计算机拟录取名单公布,各个专业都有倒数第一逆袭成功...
- 为什么在Excel文档单元格中输入长段数字就变为公式?干货来啦!如何解决在excel单元格中输入数字变为公式的问题?
- J2SDK和TOMCAT的安装及配置
- 银行用计算机实现了,银行考试计算机专项练习(一)!!!.pdf
- Windows10系统内置的emoji表情
- 妖怪,看法宝-看反射的“照妖镜”如何让类原形毕露
- element ui el-dialog子组件放到表格中title一直居中
- 无代码五月大事件|微软低代码矩阵更新;多份行业报告发布...
热门文章
- SQL Server ALwayson 正在解析
- ssh linux免密登录。。。。生产共钥到另一台主机
- Linked list(单链表)
- python的or操作符连接多个字符串含义是什么?
- windows系统解决github.com访问超时
- 利用nginx泛域名解析配置二级域名和多域名
- DEBUGnbsp;设置监视点:判断变量值
- 两台路由器之间建立邻接关系的过程即报文信息交换过程
- springboot 引入jdbc驱动_SpringBoot整合jdbc、durid、mybatis详解,数据库的连接就是这么简单...
- 过滤器在图纸上的符号_终于找全了,施工图纸上那一堆难记的符号,赶紧收藏!...