OpenSSL配置文件
配置文件语法
- 包含其它文件
“`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的名字。