openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html


虽说配置文件很多设置不用修改就能直接使用,但是了解它是配置openssl相关事项所必须的。而且要实现复杂多功能,必然要对配置相关了然于心。

1.man config

该帮助文档说明了openssl.cnf以及一些其他辅助配置文件的规范、格式及读取方式。后文中的所有解释除非特别指明,都将以openssl.cnf为例。

[root@xuexi ~]# whatis config

Config (3pm) - access Perl configuration information

config (5ssl) - OpenSSL CONF library configuration files

Config::Extensions (3pm) - hash lookup of which core extensions were built

config.guess [config] () - guess the build system triplet

config [openssl] (5ssl) - OpenSSL CONF library configuration files

config.sub [config] () - validate and canonicalize a configuration triplet

config-util () - Common PAM configuration file for configuration utilities

因此直接man config即可。

配置文件openssl.cnf中分成了多个段落,每个段落都使用中括号包围的方式"[section_name]"来标识。section_name可以包含字母、数字和下划线。

第一个section被解释为默认段落,默认段落一般(是一般不是一定)没有[section_name]标识。当搜索某一个section时,将首先搜索有名称的section,然后还会搜索默认section,如果没有找到匹配的有名称的section,将直接读取默认section。

该配置文件中使用#开头来书写注释信息。每个section包含一些name以及它们的值,格式为name=value,name和value的前导或尾随空格被忽略,如果要包含空格应该使用引号包围。

在name部分可以包含字母、数字以及一些标点符号,如“.”“,”“;”或“_”。

在value部分可以使用变量扩展。在每个section中可以定义变量,每个section的变量默认只作用于当前section,变量引用的格式有两种"$var"或"${var}"。如果想要引用其他section中的变量或name,可以使用"$section_name::name"或"${section::name}"。

在value部分可以指定为其他section的指针。请参看下文的示例。

可以使用反斜线“\”转义,包括转义引号字符以及反斜线本身,也可以使用“\”来进入多行书写模式。另外\n、\r、\b、\t是能够被识别的。

以下为书写示例,注意其中的特性。

/* This is the default section.*/
HOME=/temp
RANDFILE= ${ENV::HOME}/.rnd
configdir=$ENV::HOME/config [ section_one ]
default_value = section_three
/* Also you can refer section_name by character "@" */
default_value = @section_three [ section_two ]
/* We are now in section two. *//* Quotes permit leading and trailing whitespace */
any = " any variable name "
other = A string that can \
cover several lines \
by including \\ characters
message = Hello World\n [section_three]
greeting =

$section_one::message

2./etc/pki/tls/openssl.cnf

该文件主要设置了证书请求、签名、crl相关的配置。主要相关的伪命令为ca和req。对于x509不用该配置文件。

该文件从功能结构上分为4个段落:默认段、ca相关的段、req相关的段、tsa相关的段。每个段中都以name=value的格式定义。

该文件中没有被引用的段被视为忽略段,不会起到任何作用。

每个段中可以书写哪些name以及它们的意义,可以man相关命令,如man ca可以查看ca相关段可以书写的name,man req可以查看req相关段可以书写的name。

(1).默认段

第一段是默认段,一般没有section_name,但不是一定没有,可以自定义有名称的。

默认段中定义的是一些公共属性,当搜索一个给定名称的段时,将首先搜索有名称的段,当搜索不到匹配的段后会搜索默认段。

以下是默认段的内容。

HOME = .

RANDFILE = $ENV::HOME/.rnd

oid_section = new_oids

仅定义了当前目录变量,以及随机数的文件路径变量。

至于最后一行的oid_section=new_oids表示指向[new_oids]段。以下为new_oids段。oid是是对象标识符,干啥的我也不知道,反正没改过它。

[ new_oids ]

tsa_policy1 = 1.2.3.4.

tsa_policy2 = 1.2.3.4.5.6

tsa_policy3 = 1.2.3.4.5.7

(2).ca相关的段

这些段定义ca相关的控制选项。以下为ca相关段内容。其中黄底加粗黑字的为必须项,黄底加粗红字的为建议设置或建议修改的项。

####################################################################
[ ca ]
default_ca = CA_default /*The default ca section*/
####################################################################
[ CA_default ] 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(提供序列号的文件)*/
crlnumber = $dir/crlnumber /* the current crl number(当前crl序列号) */
crl = $dir/crl.pem /* The current CRL(当前CRL) */
private_key = $dir/private/cakey.pem /* The private key(签名时需要的私钥,即CA自己的私钥) */
RANDFILE = $dir/private/.rand /* private random number file(提供随机数种子的文件) */
x509_extensions = usr_cert /* The extentions to add to the cert(添加到证书中的扩展项) */
/* 以下两行是关于证书展示格式的,虽非必须项,但推荐设置。一般就如下格式不用修改 */
name_opt = ca_default /* Subject Name options*/
cert_opt = ca_default /* Certificate field options */
/* 以下是copy_extensions扩展项,需谨慎使用 */
# copy_extensions = copy /* 生成证书时扩展项的copy行为,可设置为none/copy/copyall */
/* 不设置该name时默认为none */
/* 建议简单使用时设置为none或不设置,且强烈建议不要设置为copyall */
# crl_extensions = crl_ext
default_days = /* how long to certify for(默认的证书有效期) */
default_crl_days= /* how long before next CRL(CRL的有效期) */
default_md = default /* use public key default MD(默认摘要算法) */
preserve = no /* keep passed DN ordering(Distinguished Name顺序,一般设置为no */
/* 设置为yes仅为了和老版本的IE兼容)*/
policy = policy_match /* 证书匹配策略,此处表示引用[ policy_match ]的策略 */
/* 证书匹配策略定义了证书请求的DN字段(field)被CA签署时和CA证书的匹配规则 */
/* 对于CA证书请求,这些匹配规则必须要和父CA完全相同 */
[ policy_match ]
countryName = match /* match表示请求中填写的该字段信息要和CA证书中的匹配 */
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional /* optional表示该字段信息可提供可不提供 */
commonName = supplied /* supplied表示该字段信息必须提供 */
emailAddress = optional
/* For the 'anything' policy*/
/* At this point in time, you must list all acceptable 'object' types. */ /* 以下是没被引用的策略扩展,只要是没被引用的都是被忽略的 */
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
/* 以下是添加的扩展项usr_cert的内容*/
[ usr_cert ]
basicConstraints=CA:FALSE /* 基本约束,CA:FALSE表示该证书不能作为CA证书,即不能给其他人颁发证书*/
/* keyUsage = critical,keyCertSign,cRLSign # 指定证书的目的,也就是限制证书的用法*/
/* 除了上面两个扩展项可能会修改下,其余的扩展项别管了,如下面的 */
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

(3).req相关的段

[ req ]
default_bits = /* 生成证书请求时用到的私钥的密钥长度 */
default_md = sha1 /* 证书请求签名时的单向加密算法 */
default_keyfile = privkey.pem /* 默认新创建的私钥存放位置, */
/* 如-new选项没指定-key时会自动创建私钥 */
/* -newkey选项也会自动创建私钥 */
distinguished_name = req_distinguished_name /* 可识别的字段名(常被简称为DN) */
/* 引用req_distinguished_name段的设置 */
x509_extensions = v3_ca /* 加入到自签证书中的扩展项 */
# req_extensions = v3_req /* 加入到证书请求中的扩展项 */
attributes = req_attributes /* 证书请求的属性,引用req_attributes段的设置,可以不设置它 */ # encrypt_key = yes | no /* 自动生成的私钥文件要加密否?一般设置no,和-nodes选项等价 */
/* 输入和输出私钥文件的密码,如果该私钥文件有密码,不写该设置则会提示输入 */
/* input_password = secret */
/* output_password = secret */ # prompt = yes | no /* 设置为no将不提示输入DN field,而是直接从配置文件中读取,需要同时设置DN默认值,否则创建证书请求时将出错。 */
string_mask = utf8only [ req_distinguished_name ]
/* 以下项均可指定可不指定,但ca段的policy中指定为match和supplied一定要指定。 */
/* 以下选项都可以自定义,如countryName = C,commonName = CN */ countryName = Country Name ( letter code) /* 国家名(C) */
countryName_default = XX /* 默认的国家名 */
countryName_min = /* 填写的国家名的最小字符长度 */
countryName_max = /* 填写的国家名的最大字符长度 */
stateOrProvinceName = State or Province Name (full name) /* 省份(S) */
/* stateOrProvinceName_default = Default Province */
localityName = Locality Name (eg, city) /* 城市(LT) */
localityName_default = Default City
.organizationName = Organization Name (eg, company) /* 公司(ON) */
.organizationName_default = Default Company Ltd
organizationalUnitName = Organizational Unit Name (eg, section) /* 部门(OU) */
/* organizationalUnitName_default = */
/* 以下的commonName(CN)一般必须给,如果作为CA,那么需要在ca的policy中定义CN = supplied */
/* CN定义的是将要申请SSL证书的域名或子域名或主机名。 */
/* 例如要为zhonghua.com申请ssl证书则填写zhonghua.com,而不能填写www.zhonghua.com */
/* 要为www.zhonghua.com申请SSL则填写www.zhonghua.com */
/* CN必须和将要访问的网站地址一样,否则访问时就会给出警告 */
/* 该项要填写正确,否则该请求被签名后证书中的CN与实际环境中的CN不对应,将无法提供证书服务 */
commonName = Common Name (eg, your name or your server\'s hostname) /* 主机名(CN) */
commonName_max =
emailAddress = Email Address /* Email地址,很多时候不需要该项的 */
emailAddress_max = [ req_attributes ] /* 该段是为了某些特定软件的运行需要而设定的, */
/* 现在一般都不需要提供challengepassword */
/* 所以该段几乎用不上 */
/* 所以不用管这段 */
challengePassword = A challenge password
challengePassword_min =
challengePassword_max =
unstructuredName = An optional company name
[ v3_req ]
/* Extensions to add to a certificate request */
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
[ v3_ca ]
/* Extensions for a typical CA */
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = CA:true
# keyUsage = cRLSign, keyCertSign /* 典型的CA证书的使用方法设置,由于测试使用所以注释了 */
/* 如果真的需要申请为CA/*么该设置可以如此配置 */

可以自定义DN(Distinguished Name)段中的字段信息,注意ca段中的policy指定的匹配规则中如果指定了match或这supplied的则DN中必须定义。例如下面的示例:由于只有countryName、organizationName和commonName被设定为match和supplied,其余的都是optional,所以在DN中可以只定义这3个字段,而且在DN中定义了自定义的名称。

[policy_to_match]
countryName = match
stateOrProvinceName = optional
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[DN]
countryName = "C"
organizationName = "O"
commonName = "Root CA"

(4).配置文件示例

以下是一个配置文件的示例。假设该配置文件路径为/ssl/ssl.conf。

[default]
name = root-ca /* 变量*/
default_ca = CA_default
name_opt = ca_default
cert_opt = ca_default [CA_default]
home = . /* 变量*/
database = $home/db/index
serial = $home/db/serial
crlnumber = $home/db/crlnumber
certificate = $home/$name.crt
private_key = $home/private/$name.key
RANDFILE = $home/private/random
new_certs_dir = $home/certs
unique_subject = no
copy_extensions = none
default_days =
default_crl_days =
default_md = sha256
policy = policy_to_match [policy_to_match]
countryName = match
stateOrProvinceName = optional
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional [CA_DN]
countryName = "C"
contryName_default = "CN"
organizationName = "O"
organizationName_default = "jmu"
commonName = "CN"
commonName_default = "longshuai.com" [req]
default_bits =
encrypt_key = no
default_md = sha256
utf8 = yes
string_mask = utf8only
# prompt = no /* 测试时该选项导致出错,所以将其注释掉*/
distinguished_name = CA_DN
req_extensions = ca_ext [ca_ext]
basicConstraints = critical,CA:true
keyUsage = critical,keyCertSign,cRLSign
subjectKeyIdentifier = hash

根据该配置文件示例,进行自建根CA、签名等的操作方法请看:http://www.cnblogs.com/f-ck-need-u/p/6091105.html

OpenSSL主配置文件openssl.cnf的更多相关文章

  1. (12) OpenSSL主配置文件openssl.cnf

    1.man config 该帮助文档说明了openssl.cnf以及一些其他辅助配置文件的规范.格式及读取方式.后文中的所有解释除非特别指明,都将以openssl.cnf为例. [root@local ...

  2. mysql主配置文件my.cnf详细说明

    MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用[转载]#BEGIN CONFIG INFO#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大 ...

  3. 详解Apache服务与高级配置,(主配置文件每行都有描述)

    HTTP服务---> http://httpd.apache.org/(官方网站) httpd  service :纯粹的web服务器,同时开源(不是GPL). 特性:1.在进程特性上通常是事先 ...

  4. CentOS6.7安装部署php5(详解安装选项与主配置文件)

    模块安装---PHP 编译环境:gcc  gcc-c++   pcre-devel  openssl-devel   libxml2   libxml2-devel   bzip   bzip-dev ...

  5. nginx官方源安装-主配置文件详解

    HTTP相关术语 PV : Page Visit 页面独立浏览量,查看日志生成条数可以看到PV数量. PV全称Page View,中文翻译即页面浏览.其具体的度量方法是从浏览器发出一个对网络服务器的请 ...

  6. MySQL配置文件my.cnf 例子最详细翻译

    转的 MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载 ...

  7. mysql配置文件my.cnf详解

    原文地址:mysql配置文件my.cnf详解 作者:gron basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的 ...

  8. MySQL 配置文件my.cnf

    转载: MySQL配置文件my.cnf 详解:#BEGIN CONFIG INFO#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大#TYPE: SYSTEM ...

  9. Apache主配置文件httpd.conf 详解

    Apache的主配置文件:/etc/httpd/conf/httpd.conf 默认站点主目录:/var/www/html/ Apache服务器的配置信息全部存储在主配置文件/etc/httpd/co ...

随机推荐

  1. Nginx限速遇到的问题

    公司使用的是Nginx做文件服务器,最近服务器流量增大,老板提出要给每个客户端进行限速. 在Nginx中进行限速配置: http { limit_zone one $binary_remote_add ...

  2. Volley网络框架的使用

    Volley的特点:   使用网络通信更快.更简单 Get/Post网络请求网络图像的高效率异步请求 可以对网络请求的优先级进行排序处理 可以进行网络请求的缓存 可以取消多级别请求 可以和Activi ...

  3. 数据库schema设计与优化

    原文地址 1. 前言 对于数据库而言,在日常开发中我们主要的关注点有两块,一个是schema的结构设计,另一个就是索引的优化,这两块是影响我们最终系统结构和性能的关键部分,自然也是我们花费精力最多的部 ...

  4. php 对象中连贯执行方法

    连贯操作的重点是返回当前对象,以便可以继续执行 class Ceshi{ public $str = ''; public function f1($a){ $this->str .= $a; ...

  5. 由system.currentTimeMillis() 获得当前的时间

    System类代表系统,系统级的很多属性和控制方法都放置在该类的内部.该类位于java.lang包. currentTimeMillis方法 public static long currentTim ...

  6. sql语句-ALTER TABLE

    在工作中常遇到要维护数据库表的列,这里主要介绍sql语句中的ALTER TABLE 语句.ALTER TABLE 语句用于在已有的表中添加.修改或删除列. 如需在表中添加列,请使用下列语法: ALTE ...

  7. [REP]AWS Regions and Availability Zones: the simplest explanation you will ever find around

    When it comes to Amazon Web Services, there are two concepts that are extremely important and spanni ...

  8. 安利一个MVC的好东西,RazorGenerator.MsBuild,可以自动编译cshtml文件

    在传统的asp.net webForm 开发里,在发布时,如果选择预编译,就会自动将所有的aspx 文件编译,在发布后的目录里,就看不到aspx的源代码了,同时因为是预编译的,所以每个页面打开速度都挺 ...

  9. 使用Javah 生成C/C++头文件

    注意:编写java的接口文件. 注意native代码端一定不要有大括号,且要有“:”结尾. public native int add(int x ,int y); 1. 需要让eclipse自动编译 ...

  10. Flasky学习笔记(一)

    1. app.run(debug=True,host='10.0.2.15',port=8000)自定义host及port;