OpenSSL配置文件

OpenSSL配置文件

语法

  1. 包含其它文件

    “`openssl cnf
    .include [=] pathname # 相对路径
    .pragma [=] abspath:value # 绝对路径
    .pragma [=] dollarid:value # 路径包含变量
    “`
    注释使用`#`

  2. section

    一个配置文件包含若干个section,一个section由用方括号包围的secton name开始,直到另一个section结束。section name和方括号之间的空白符会被忽略。
    环境变量会映射到ENV section。
    如下所示:

    “`openssl cnf
    [ section ]
    name1 = This is value1
    name2 = Another value

    [ newsection ]
    name1 = New value1
    name3 = Value 3

    <pre><code class="line-numbers">从文件开始到第一个section出现之前的配置属于default section,default section是OpenSSL首先读取的section。
    在一个section不允许出现重复的字段名,后面的值会覆盖前面的值,但是有时候又需要配置重复的字段,所以当需要一个字段多次配置时需要加前缀。
    如下所示:
    “`openssl cnf
    1.OU = First OU
    2.OU = Second OU

    “.”及前面的数字会被忽略,把这些字段当成相同的字段。
    value在”=”号后面直到行尾,两边的空白符会被移除
    通过$var or ${var}可以引用当前section中的变量,通过$section::name or ${section::name}可以引用其它section的变量,通过$ENV::name引用环境变量。
    如果一个value超过64k会报错,value可以使用单/双引号包围,可以使用转义字符,如查多行字符则以\结尾。

模块配置

“`openssl cnf
config_diagnostics = 1
openssl_conf = openssl_init

[openssl_init]
oid_section = oids
providers = providers
alg_section = evp_properties
ssl_conf = ssl_configuration
engines = engines
random = random

[oids]
shortName = a very long OID name, 1.2.3.4
newoid1 = 1.2.3.4.1
some_other_oid = 1.2.3.5

[providers]
… provider stuff here …

[evp_properties]
… EVP properties here …

[ssl_configuration]
… SSL/TLS configuration properties here …

[engines]
… engine properties here …

[random]
… random properties here …

<pre><code class="line-numbers">openssl_init section中指定了每个模块对应的section。
oids section是用来新增自己的oid的,由两种语法

– 包含长名称

shortName = a very long OID name, 1.2.3.4

– 不包含长名称

newoid1 = 1.2.3.4.1
some_other_oid = 1.2.3.5
字段的名称就是oid的短名称,长名称是可选的

## Provider 配置

Openssl3.0引入了Provider的概念,把一组算法独立出来放在一个模块中称为一个Provider。对Provider使用动态加载,使算法的实现独立于Openssl本身。

</code></pre>

[providers]
foo = foo_provider # providers列表

[foo_provider]
identity = my_fips_module # 备用名
module = /var/lib/openssl/module1.so # 模块位置
activate = yes # 是否激活

<h3>EVP 配置</h3>

用于指定EVP算法的默认属性

“`openssl cnf
[evp_properties]
default_properties = fips=yes

## SSL 配置

[ssl_configuration]
server = server_tls_config
client = client_tls_config
system_default = tls_system_default

[server_tls_config]
… configuration for SSL/TLS servers …

[client_tls_config]
… configuration for SSL/TLS clients …

[tls_system_default]
MinProtocol = TLSv1.2
MinProtocol = DTLSv1.2

initialization section中的ssl_conf配置指定TLS模块的配置,其它每个配置项都指向另一个section name。
system_default配置有特殊含义,如果存在的话,指示系统范围内的最低TLS/DTLS版本。同样也可以指定MaxProtocol限定最大版本。

## Engine 配置

硬件加速器的配置

[engines]
foo = foo_engine

[foo_engine]
dynamic_path = /some/path/fooengine.so
init = 1 # 指定0不初始化,指定1立即初始化,不指定则在所有其它命令处理完后初始化
some_ctrl = some_value
default_algorithms = ALL # 应用的默认算法集合
other_ctrl = EMPTY

“`

<h2>Random 配置</h2>

配置随机数生成器的参数

<ul>
<li>random 指定随机数生成器

“`openssl cnf
[random]
random = CTR-DRBG # 支持CTR-DRBG,HASH-DRBG,HMAC-DRBG
“`

  • cipher

    指定生成器的算法,默认值是AES-256-CTR

  • digest

    指定随机数的摘要算法,HASH-DRBG or HMAC-DRBG

  • properties

    指定底层算法的属性

  • seed

    使用的随机数来源,默认为SEED-SRC,表示使用FIPS provider。

  • seed_properties

    随机数源的属性

  • 环境变量

    • OPENSSL_CONF

      配置文件的路径

    • OPENSSL_ENGINES

      ENGINES的路径,ENGINE是对硬件加速器的封装。

    • OPENSSL_MODULES

      指定openssl模块的路径,也就是provider

    • OPENSSL_CONF_INCLUDE

      指定include时的目录前缀

    以上配置是OpenSSL主命令的配置,具体命令的配置还要参考具体命令下的说明。通常子命令的名字就是section的名字。

    openssl version -d命令可以显示默认openssl.cnf文件的位置,这是默认的配置文件。很多命令会通过-config选项指定配置文件读取部分或全部配置参数。可以通过OPENSSL_CONF环境变量指定不同的默认配置文件或者禁用配置文件(环境变量指定空字符串)

    Views: 3

    评论

    发表回复