原文链接: http://blog.csdn.net/allwtg/article/details/4982507

  openssl命令行工具简介 - 指令x509

  用法: 
    
      openssl x509 [-inform DER|PEM|NET] [-outform DER|PEM|NET] 
    
       [-keyform DER|PEM][-CAform DER|PEM] [-CAkeyform DER|PEM] 
    
       [-in filename][-out filename] [-serial] [-hash] [-subject] 
    
       [-issuer] [-nameopt option] [-email] [-startdate] [-enddate] 
    
       [-purpose] [-dates] [-modulus] [-fingerprint] [-alias] 
    
       [-noout] [-trustout] [-clrtrust] [-clrreject] [-addtrust arg] 
    
       [-addreject arg] [-setalias arg] [-days arg] 
    
       [-signkey filename][-x509toreq] [-req] [-CA filename] 
    
       [-CAkey filename] [-CAcreateserial] [-CAserial filename] 
    
       [-text] [-C] [-md2|-md5|-sha1|-mdc2] [-clrext] 
    
       [-extfile filename] [-extensions section] 
    
    
      说明: 
      本指令是一个功能很丰富的证书处理工具。可以用来显示证书的内容,转换其格式,给CSR签名等等。由于功能太多,我们按功能分成几部分来讲。

  输入,输出等一些一般性的option 
      -inform DER|PEM|NET 
      指定输入文件的格式。 
      -outform DER|PEM|NET 
      指定输出文件格式 
      -in filename 
      指定输入文件名 
      -out filename 
      指定输出文件名 
      -md2|-md5|-sha1|-mdc2 
      指定使用的哈希算法。缺省的是MD5

  与打印有关的option
  -text
  用文本方式详细打印出该证书的所有细节。
  -noout
  不打印出请求的编码版本信息。
  -modulus
  打印出公共密钥的系数值。没研究过RSA就别用这个了。
  -serial
  打印出证书的系列号。
  -hash
  把证书的拥有者名称的哈希值给打印出来。
  -subject
  打印出证书拥有者的名字。
  -issuer
  打印证书颁发者名字。
  -nameopt option
  指定用什么格式打印上俩个option的输出。
  后面有详细的介绍。
  -email
  如果有,打印出证书申请者的email地址
  -startdate
  打印证书的起始有效时间
  -enddate
  打印证书的到期时间
  -dates
  把上俩个option都给打印出来
  -fingerprint
  打印DER格式的证书的DER版本信息。
  -C
  用C代码风格打印结果。

  与证书信任有关的option 
      一个可以信任的证书的就是一个普通证书,但有一些附加项指定其可以用于哪些用途和不可以用于哪些用途, 该证书还应该有一个"别名"。 
      一般来说验证一个证书的合法性的时候,相关的证书链上至少有一个证书必须是一个可以信任的证书。缺省的认为如果该证书链上的Root CA的证书可以信任,那么整条链上其他证书都可以用于任何用途。 
      以下的几个option只用来验证Root CA的证书。CA在颁发证书的时候可以控制该证书的用途,比如颁发可以用于SSL client而不能用于SSL server的证书。 
      -trustout 
      打印出可以信任的证书。 
      -setalias arg 
      设置证书别名。比如你可以把一个证书叫"fordesign's certificate", 那么以后就可以使用这个别名来引用这个证书。 
      -alias 
      打印证书别名。 
     -clrtrust 
     清除证书附加项里所有有关用途允许的内容。 
     -clrreject 
     清除证书附加项里所有有关用途禁止的内容。 
     -addtrust arg 
     添加证书附加项里所有有关用途允许的内容。 
     -addreject arg 
     添加证书附加项里所有有关用途禁止的内容。 
     -purpose 
     打印出证书附加项里所有有关用途允许和用途禁止的内容。 
    
  与签名有关的otpion 
      本指令可以用来处理CSR和给证书签名,就象一个CA 
      -signkey filename 
      使用这个option同时必须提供私有密钥文件。这样把输入的文件变成字签名的证书。 
      如果输入的文件是一个证书,那么它的颁发者会被set成其拥有者.其他相关的项也会被改成符合自签名特征的证书项。 
      如果输入的文件是CSR, 那么就生成自签名文件。 
      -clrext 
      把证书的扩展项删除。 
      -keyform PEM|DER 
      指定使用的私有密钥文件格式。 
      -days arg 
      指定证书的有效时间长短。缺省为30天。 
      -x509toreq 
      把一个证书转化成CSR.用-signkey指定私有密钥文件 
      -req 
      缺省的认为输入文件是证书文件,set了这个option说明输入文件是CSR. 
      -CA filename 
      指定签名用的CA的证书文件名。 
      -CAkey filename 
      指定CA私有密钥文件。如果这个option没有参数输入,那么缺省认为私有密钥在CA证书文件里有。 
      -CAserial filename 
      指定CA的证书系列号文件。证书系列号文件在前面介绍过,这里不重复了。 
      -CAcreateserial filename 
      如果没有CA系列号文件,那么本option将生成一个。 
      -extfile filename 
      指定包含证书扩展项的文件名。如果没有,那么生成的证书将没有任何扩展项。 
      -extensions section 
     指定文件中包含要增加的扩展项的section 
      上面俩个option有点难明白是吧?后面有举例。 
      与名字有关的option.这些option决定证书拥有者/颁发者的打印方式。缺省方式是印在一行中。 
      这里有必要解释一下这个证书拥有者/颁发者是什么回事。它不是我们常识里的一个名字,而是一个结构,包含很多字段。 
      英文分别叫subject name/issuer name.下面是一个subject name的例子 
      subject= 
      countryName = AU 
      stateOrProvinceName = Some-State 
      localityName = gz 
      organizationName = ai ltd 
      organizationalUnitName = sw 
      commonName = fordesign 
      emailAddress = xxx@xxx.xom

-nameopt 
      这个option后面的参数就是决定打印的方式,其参数有以下可选: 
      compat 
      使用以前版本的格式,等于没有设置任何以下option 
      RFC2253 
      使用RFC2253规定的格式。 
      oneline 
      所有名字打印在一行里面。 
     multiline 
      名字里的各个字段用多行打印出来。

上面那几个是最常用的了,下面的这些我怎么用怎么不对,也许以后研究source在完善这里了。 
      esc_2253 esc_ctrl esc_msb use_quote utf8 no_type show_type dump_der 
      dump_nostr dump_all dump_unknown sep_comma_plus sep_comma_plus_space 
      sep_semi_plus_space sep_multiline dn_rev nofname, sname, lname, oid spc_eq

  举例时间: 
      打印出证书的内容: 
      openssl x509 -in cert.pem -noout -text 
      打印出证书的系列号 
      openssl x509 -in cert.pem -noout -serial 
      打印出证书的拥有者名字 
      openssl x509 -in cert.pem -noout -subject 
      以RFC2253规定的格式打印出证书的拥有者名字 
      openssl x509 -in cert.pem -noout -subject -nameopt RFC2253 
      在支持UTF8的终端一行过打印出证书的拥有者名字 
      openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb 
      打印出证书的MD5特征参数 
      openssl x509 -in cert.pem -noout -fingerprint 
      打印出证书的SHA特征参数 
      openssl x509 -sha1 -in cert.pem -noout -fingerprint 
      把PEM格式的证书转化成DER格式 
      openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER 
      把一个证书转化成CSR 
      openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem 
      给一个CSR进行处理,颁发字签名证书,增加CA扩展项 
      openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem 
      给一个CSR签名,增加用户证书扩展项 
      openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial 
      把某证书转化成用于SSL client可信任证书, 增加别名alias 
      openssl x509 -in cert.pem -addtrust sslclient -alias "Steve's Class 1 CA" -out trust.pem

  上面有很多地方涉及到证书扩展/证书用途,这里解释一下: 
  我们知道一个证书是包含很多内容的,除了基本的那几个之外,还有很多扩展的项。比如证书用途,其实也只是证书扩展项中的一个。 
      我们来看看一个CA证书的内容: 
      openssl x509 -in ca.crt -noout -text 
      Certificate: 
      Data: 
      Version: 3 (0x2) 
      Serial Number: 0 (0x0) 
      Signature Algorithm: md5WithRSAEncryption 
      Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, 
      CN=fordesign/Email=fordeisgn@21cn.com 
      Validity 
      Not Before: Nov 9 04:02:07 2000 GMT 
      Not After : Nov 9 04:02:07 2001 GMT 
      Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, 
      CN=fordesign/Email=fordeisgn@21cn.com 
      Subject Public Key Info: 
      Public Key Algorithm: rsaEncryption 
      RSA Public Key: (1024 bit) 
      Modulus (1024 bit): 
      00:e7:62:1b:fb:78:33:d7:fa:c4:83:fb:2c:65:c1: 
      08:03:1f:3b:79:b9:66:bb:31:aa:77:d4:47:ac:be: 
      e5:20:ce:ed:1f:b2:b5:4c:79:c9:9b:ad:1d:0b:7f: 
      84:49:03:6b:79:1a:fd:05:ca:36:b3:90:b8:5c:c0: 
      26:93:c0:02:eb:78:d6:8b:e1:91:df:85:39:33:fc: 
      3d:59:e9:7f:58:34:bf:be:ef:bd:22:a5:be:26:c0: 
      16:9b:41:36:45:05:fe:f9:b2:05:42:04:c9:3b:28: 
      c1:0a:48:f4:c7:d6:a8:8c:f9:2c:c1:1e:f5:8b:dc: 
      19:59:7c:47:f7:91:cc:5d:75 
      Exponent: 65537 (0x10001) 
      X509v3 extensions: 
      X509v3 Subject Key Identifier: 
      69:41:87:55:BD:52:99:D0:F5:EC:11:7F:0A:01:53:58:4E:0B:7C:F7 
      X509v3 Authority Key Identifier: 
      keyid:69:41:87:55:BD:52:99:D0:F5:EC:11:7F:0A:01:53:58: 
      4E:0B:7C:F7 
      DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty 
      Ltd/CN=fordesign/Email=fordeisgn@21cn.com 
      serial:00 
      X509v3 Basic Constraints: 
      CA:TRUE 
      Signature Algorithm: md5WithRSAEncryption 
      79:14:99:4a:8f:64:63:ab:fb:ad:fe:bc:ba:df:53:97:c6:92: 
      41:4d:de:fc:59:98:39:36:36:8e:c6:05:8d:0a:bc:49:d6:20: 
      02:9d:a2:5f:0f:03:12:1b:f2:af:23:90:7f:b1:6a:86:e8:3e: 
      0b:2c:fd:11:89:86:c3:21:3c:25:e2:9c:de:64:7a:14:82:32: 
      22:e1:35:be:39:90:f5:41:60:1a:77:2e:9f:d9:50:f4:81:a4: 
      67:b5:3e:12:e5:06:da:1f:d9:e3:93:2d:fe:a1:2f:a9:f3:25: 
      05:03:00:24:00:f1:5d:1f:d7:77:8b:c8:db:62:82:32:66:fd: 
      10:fa 
      是否看到我们先提到过的subject name/issuer name.本证书中这俩个字段是一样的,明显是自签名证书,是一个Root CA的证书。从X509v3 extension开始就是证书扩展项了。 
      这里有个X509v3 Basic constraints. 里面的CA字段决定该证书是否可以做CA的证书,这里是TURE。如果这个字段没有,那么会根据其他内容决定该证书是否可以做CA证书。 
      如果是X509v1证书,又没有这个扩展项,那么只要subject name和issuer name相同,就认为是Root CA证书了。

  本例的证书没有证书用途扩展项,它是一个叫keyUseage的字段。 
      举个例子就可以看出该字段目前可以有以下值 
      openssl x509 -purpose -in server.crt 
      Certificate purposes: 
      SSL client : Yes 
      SSL client CA : No 
      SSL server : Yes 
      SSL server CA : No 
      Netscape SSL server : Yes 
      Netscape SSL server CA : No 
      S/MIME signing : Yes 
      S/MIME signing CA : No 
      S/MIME encryption : Yes 
      S/MIME encryption CA : No 
      CRL signing : Yes 
      CRL signing CA : No 
      Any Purpose : Yes 
      Any Purpose CA : Yes 
      SSL Client 
      SSL Client CA

openssl命令行工具简介 - 指令x509的更多相关文章

  1. openssl命令行工具简介 - RSA操作

    原文链接: http://www.cnblogs.com/aLittleBitCool/archive/2011/09/22/2185418.html 首先介绍下命令台下openssl工具的简单使用: ...

  2. Scrapy命令行工具简介

    Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spide ...

  3. MySQL 命令行工具之 mysqldump 深入研究

    mysqldump 是MySQL的一个命令行工具,用于逻辑备份.可以将数据库和表的结构,以及表中的数据分别导出成:create database, create table, insert into的 ...

  4. Tools - Windows系统下的命令行工具Cmder

    cmder简介 官网:http://cmder.net/ GitHub:https://github.com/cmderdev/cmder Cmder是一个windows下的命令行工具,用来替代win ...

  5. 用OpenSSL命令行生成证书文件

    用OpenSSL命令行生成证书文件 1.首先要生成服务器端的私钥(key文件): openssl genrsa -des3 -out server.key 1024 运行时会提示输入密码,此密码用于加 ...

  6. -Shell 命令行工具 Cmder Babun Zsh MD

    目录 目录 Cmder:window 下增强型的 cmd + bash 简介 配置 解决中文乱码问题 添加到右键菜单 添加至环境变量 修改命令提示符号 自定义aliases Readme.md 设置c ...

  7. 命令行工具--curl

    目录 命令:curl 一.简介 二.使用案例 1.基本用法 2.保存访问的网页 3.测试网页返回值 4.指定proxy服务器以及其端口 5.cookie 6.模仿浏览器 7.伪造referer(盗链) ...

  8. windows下的命令行工具babun

    什么是babun babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell.用官方的题目说就是 ...

  9. Linux 性能监控之命令行工具

    引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...

随机推荐

  1. 大数据在教育中的应用 part2笔记

    什么是交叉检验(K-fold cross-validation)   K层交叉检验就是把原始的数据随机分成K个部分.在这K个部分中,选择一个作为测试数据,剩下的K-1个作为训练数据. 交叉检验的过程实 ...

  2. URAL - 1495 One-two, One-two 2

    URAL - 1495 这是在dp的专题里写了,想了半天的dp,其实就是暴力... 题目大意:给你一个n,问你在30位以内有没有一个只由1或2 构成的数被 n 整除,如果 有则输出最小的那个,否则输出 ...

  3. Linux学习之用户配置文件详解(十四)

    Linux学习之用户配置文件详解 目录 用户信息文件/etc/password 影子文件/etc/shadow 组信息文件/etc/group 组密码文件/etc/gshadow 用户信息文件/etc ...

  4. Mongodb - 切片搭建

    0.概述 mongodb分片搭建,版本号4.0.2,以下除了创建opt文件夹以外,所有操作均在mongodb用户下面执行 准备三台机器:192.168.56.81192.168.56.82192.16 ...

  5. sql注入总结(二)--2018自我整理

    0x00前言: 继上篇的内容,这章总结下二次注入,python脚本,bypass 上篇sql注入总结(一)--2018自我整理 0x01二次注入: 二次注入的原理是在把非法代码添加进数据库里面存储了, ...

  6. Ubuntu urllib2.URLError:<urlopen error unknown url type:https>

    描述: python中urllib2 下载网页时,出现错误urllib2.URLError:<urlopen error unknown url type:https> 解决方法: pyt ...

  7. sleep() 和 wait() 有什么区别?

     sleep:Thread类中定义的方法,表示线程休眠,会自动唤醒: wait:Object中定义的方法,需要手工调用notify()或者notifyAll()方法. sleep是线程类(Thread ...

  8. SQL RAISERROR 用法

    ) ), YOUR UNIQUEIDENTIFIER KEY) ,, @raiseErrorCode) RAISERROR ( N'This is message %s %d.', -- Messag ...

  9. BZOJ.2095.[POI2010]Bridges(最大流ISAP 二分 欧拉回路)

    题目链接 最小化最大的一条边,二分答案.然后就变成了给一张无向图定向使其为欧拉回路 二分答案后对于一个位置的两条边可能都保留,即双向边,需要给它定向:可能只保留小的一条,即单向边,不需考虑 如何给它定 ...

  10. failed to load class "org.sl4j.impl.StaticLoggerBinder"

    (1)要确保有properties文件在你的主项目的src下面 (2)https://www.slf4j.org/codes.html(这个是配置相关文件) (3)如果经过1.2步后问题依然存在,那么 ...