原文链接: 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. Spring日记_01 之基于maven的Spring环境搭建

    阿里云镜像:maven.aliyun.com 添加Spring坐标: Spring 是java组件容器,Java饭馆 使用者可以通过getBean(对象ID) 获得Date对象,而不需要自己去new ...

  2. Environment error: “CodeBloks can't find compiler executable in your configured search path's for GNU GCC compiler”

    codeblock安装后,提示cant find compiler executable in your configured search paths for GNU GCC Compiler 可能 ...

  3. Python库资源大全

    转载地址:https://zhuanlan.zhihu.com/p/27350980 本文是一个精心设计的Python框架.库.软件和资源列表,是一个Awesome XXX系列的资源整理,由BigQu ...

  4. vue2.0以上版本安装sass(scss)

    一.首先说明sass和scss的区别. 1.异同:1)简言之可以理解scss是sass的一个升级版本,完全兼容sass之前的功能,又有了些新增能力.语法形式上有些许不同,最主要的就是sass是靠缩进表 ...

  5. Pytorch 基础

    Pytorch 1.0.0 学习笔记: Pytorch 的学习可以参考:Welcome to PyTorch Tutorials Pytorch 是什么? 快速上手 Pytorch! Tensors( ...

  6. PHP如何支持CURL字符串证书传输

    背景 最近在对接微信支付的时候,需要在退款处用到证书,由于我们是SAAS平台,要支持多方多渠道支付,如果把所有证书文件保存在应用服务器会受到SLB的影响,会导致某台机器文件不同步而阻碍退款流程,但把文 ...

  7. 【xxl-job】轻松实现分布式定时任务demo实例

    [项目描述]前段时间专门独立了一个spring boot服务,用于做和第三方erp系统的对接工作.此服务的第一个需求工作就是可以通过不同的规则,设置不同的定时任务,从而获取erp系统的商品数据.所以, ...

  8. SQL 查询 技巧

    一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的 ...

  9. Python3 里面的线程池

    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import time def task(i): print ...

  10. VMware虚拟机安装CentOS6.4、部署web项目全过程(设置固定IP、安装JDK、Tomcat、Redis、部署项目)

    概述:该篇随笔介绍了在VMware上安装centOS.在centOS上安装JDK.安装Tomcat.安装Redis并部署项目的全过程,虽然参考了很多优秀的文章,但实践.整理.补充都很用心,若要复制粘贴 ...