使用OpenSSL实现证书操作

来源:互联网 发布:mac版梦幻西游鼠标右键 编辑:程序博客网 时间:2024/06/07 04:48
伴随着计算机的发展,计算机的安全问题也一直困扰着我们,在现代社会计算机信息安全更显得格外的重要,如今的社会是一个信息的社会,你我每天都在使用计算机,随着电子邮件、社区网游、即使通讯、电子商务等应用的发展,我们的私人信息也在通过各种网络设备在互联网上被传递,如何才能保障这些私人信息的安全是我们所要关心的。
对重要的数据如银行帐号我们可以使用加密技术加密我们的数据,然后再通过网络传递这些信息,现代加密技术通常被分为:对称加密技术和非对称加密技术。
其中对称加密技术的特点是:
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:000000 -new -out request.pem
使用一个已存在的密钥生成证书请求文件(注:privkey是已存在的私钥文件,000000是该私钥的口令,关于如何生成非对称密钥对,你可以查看博客中的相关文章)
2.openssl req -newkey rsa:1024 -keyout privekey.pem -passout pass:000000 -out request.pem
生成一份新的1024位的私钥privekey.pem,再使用该私钥生成一份证书请求文件request.pem。
3.openssl req -new -x509 -key privekey.pem -passin pass:000000 -out cert.cer
使用已存在的密钥privekey.pem,生成一份自签名的根证书cert.cer。

二、证书管理命令:CA
usage: ca args
 -verbose        - Talk a lot 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
更新证书数据库
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东退货退款卖家已签收了怎么办 京东账号手机号换了密码忘了怎么办 qq飞车手游录像下载失败怎么办 手机知道qq号怎么破解密码怎么办 网上购物已付钱迟迟不发货怎么办 有人冒充微信头像和熟人借钱怎么办 微信红包输了50多万怎么办 脖子里的绳结接口磨脖子怎么办 母比格犬生了小狗毛色变了怎么办 母比格犬生了小狗毛色很差怎么办 貂皮大衣上的暗扣掉了怎么办 呢子夹克袖子长但又不想改短怎么办 黑色的衣服熨的有点发亮怎么办 宿管阿姨工作中与学生起冲突怎么办 中通快递发的衣服不合适怎么办 加盟母婴店如果不干了货怎么办 双十一搞活动买的东西退货怎么办 天猫预售30天不发货怎么办 天猫搞活动的商品总不发货怎么办 淘宝买的东西物流把货物损坏怎么办 苹果手机5s每部存满怎么办 天猫退货分开发货退的话怎么办 淘宝优惠券电脑端显示不出来怎么办 天猫退货退款寄错了怎么办 天猫已退款货又发过来了怎么办 小米商城预售订单点错退款了怎么办 淘宝发布宝贝类目价格受限制怎么办 2019天猫续签评分不达标怎么办 天猫店铺动态不达标不能续签怎么办 京东自提发现货有问题怎么办 京东试用成功商家不发货怎么办 在淘宝主页搜不到我的店铺名怎么办 淘宝发货单号填到别人那去了怎么办 买家申请淘宝介入后同意退款怎么办 淘宝卖家手机版购买装修模块怎么办 天猫店铺和淘宝店铺想要装修怎么办 支付宝转账银行卡卡号错误怎么办 淘宝图片空间照片全部删除了怎么办 我把淘宝图片空间照片删除了怎么办 淘宝发布宝贝怎么没知道品牌怎么办 淘宝提前确认收货了怎么办已经发货