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
</code></pre>

从文件开始到第一个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 ...
</code></pre>

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的短名称,长名称是可选的

<h2>Provider 配置</h2>

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

<pre><code class="line-numbers">[providers]
foo = foo_provider # providers列表

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

### EVP 配置

用于指定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

Random 配置

配置随机数生成器的参数
- 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的名字。

发表回复

© 2021 All Rights Reserved. Design & Developed By Besticoder