openssl配置文件中文翻译及自签证书的简单部署使用
起因是想给局域网下的开发设备部署配置生产环境的ssl,但是不知为何始终不生效....于是放弃,留下步骤,后续如需使用自签证书也可以参考一下
先上翻译!
#
# OpenSSL示例配置文件。
# 参见doc/man5/config.pod以了解更多信息。
#
# 这主要用于生成证书请求,但也可用于自动加载供应商。
# 注意,你可以使用.include指令从主配置文件中包含其他文件。
#.include filename
# 这个定义可以在HOME没有定义的情况下阻止下面几行的阻塞。
HOME = .
# 使用此功能是为了自动加载供应商。
openssl_conf = openssl_init
# 注释掉下一行以忽略配置错误
config_diagnostics = 1
# 额外的OBJECT IDENTIFIER信息。
# oid_file = $ENV::HOME/.oid
oid_section = new_oids
# 要在 "openssl x509 "工具的"-extfile "选项中使用这个配置文件,请在这里命名包含要使用的X.509v3扩展的部分。
# extensions =
# (或者,使用一个配置文件,在其只有X.509v3扩展的主要部分[ = default]。)
[ new_oids ]
# 我们可以在这里添加新的OID,供'ca'、'req'和'ts'使用。
# 添加一个简单的OID,像这样:
# testoid1=1.2.3.4
# 或者像这样使用配置文件替换:
# testoid2=${testoid1}.5.6
# TSA使用的政策实例。
tsa_policy1 = 1.2.3.4.1
tsa_policy2 = 1.2.3.4.5.6
tsa_policy3 = 1.2.3.4.5.7
# 对于 FIPS
# 可以选择包括一个由OpenSSL fipsinstall应用程序生成的文件。
# 这个文件包含OpenSSL fips提供者所需的配置数据。
# 它包含一个命名的部分,例如[fips_sect],它是由下面的[provider_sect]引用的。
# 更多信息请参考OpenSSL的安全策略。
# .include fipsmodule.cnf
[openssl_init]
providers = provider_sect
ssl_conf = ssl_sect
# 要加载的供应商列表
[provider_sect]
default = default_sect
# fips部分的名称应该与包含在fipsmodule.cnf中的部分名称一致。
# fips = fips_sect
# 如果没有明确地激活任何提供者,默认的提供者会被隐式激活。
# 更多细节见 man 7 OSSL_PROVIDER-default。
#
# 如果你添加了一个明确激活其他提供者的部分,你很可能需要明确激活默认提供者,否则它在openssl中就不可用。
# 因此,依赖于OpenSSL的应用程序可能无法正常工作,这可能导致严重的系统问题,包括无法远程访问系统。
[default_sect]
# activate = 1
####################################################################
[ ca ]
default_ca = CA_default # 默认的ca部分
####################################################################
[ CA_default ]
dir = ./demoCA # 保存所有东西的地方
certs = $dir/certs # 签发的证书保存在哪里
crl_dir = $dir/crl # 签发的crl保存在哪里
database = $dir/index.txt # 数据库索引文件
#unique_subject = no # 设置为 "否",允许创建具有相同主题的多个证书
new_certs_dir = $dir/newcerts # 新证书的默认位置
certificate = $dir/cacert.pem # CA证书
serial = $dir/serial # 当前的序列号
crlnumber = $dir/crlnumber # 当前的CRL号码必须被注释掉,以留下一个V1 CRL
crl = $dir/crl.pem # 当前的CRL
private_key = $dir/private/cakey.pem # 私钥
x509_extensions = usr_cert # 要添加到证书的扩展名
# 为 "traditional"(也是highly broken)格式注释掉下面两行。
name_opt = ca_default # 主题名称选项
cert_opt = ca_default # 证书字段选项
# 扩展复制选项:谨慎使用。
# copy_extensions = copy
# 可添加到CRL中的扩展。注意:Netscape communicator对V2 CRLs很反感。
# 所以默认情况下,这部分被注释掉了,以留下V1 CRL。
# crlnumber也必须被注释掉,以留下一个V1 CRL。
# crl_extensions = crl_ext
default_days = 365 # 认证多长时间
default_crl_days= 30 # 距离下一次CRL还有多长时间
default_md = default # 使用公共密钥的默认MD
preserve = no # 保持通过DN的排序
# 用一些不同的方式来指定请求看起来应该有多相似
# 对于CA类型,列出的属性必须是相同的,而可选的和提供的字段... :-)
# For type CA, the listed attributes must be the same, and the optional and supplied fields are just that :-)
policy = policy_match
# 对于CA政策
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
# 对于'任何东西'的政策
# 在这个时候,你必须列出所有可接受的 "对象 "类型。
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
####################################################################
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca # 要添加到自签名证书中的扩展名
# 如果不存在私人钥匙的密码,将被提示输入。
# input_password = secret
# output_password = secret
# 这为允许的字符串类型设置了一个掩码。有几个选项。
# default: PrintableString, T61String, BMPString.
# pkix : PrintableString, BMPString (2004年以前推荐PKIX)
# utf8only: only UTF8Strings (2004年以后推荐PKIX).
# nombstr : PrintableString, T61String (没有 BMPStrings 或 UTF8Strings).
# MASK:XXXX 一个字面上的掩码值。
# WARNING: 古代版本的Netscape在BMPStrings或UTF8Strings上崩溃。
string_mask = utf8only
# req_extensions = v3_req # 要添加到证书请求中的扩展名
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = AU
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Some-State
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Internet Widgits Pty Ltd
# 我们可以这样做,但通常不需要这样做 :-)
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default =
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64
# SET-ex3 = SET extension number 3
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
unstructuredName = An optional company name
[ usr_cert ]
# 这些扩展是在'ca'签署请求时添加的。
# 这违反了PKIX准则,但有些CA会这样做,有些软件也要求这样做,以避免将最终用户的证书解释为CA。
basicConstraints=CA:FALSE
# 这在客户证书的keyUsage中是很典型的。
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# 如果包含在所有证书中,PKIX建议是无关紧要的。
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
# 这个东西是针对subjectAltName和issuerAltname的。
# 导入电子邮件地址。
# subjectAltName=email:copy
# 这是一个替代方案,用于生产不被PKIX淘汰的证书。
# subjectAltName=email:move
# 复制主题细节
# issuerAltName=issuer:copy
# 这是对TSA证书的要求。
# extendedKeyUsage = critical,timeStamping
[ v3_req ]
# 可添加到证书申请中的扩展功能
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
[ v3_ca ]
# 典型CA的扩展
# PKIX建议。
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true
# 密钥用途:这对 CA 证书来说是很典型的。然而,由于它将阻止它被用作测试自签名证书,因此最好在默认情况下不使用。
# keyUsage = cRLSign, keyCertSign
# 在主题中包括电子邮件地址 替换名称:另一个PKIX建议
# subjectAltName=email:copy
# 复制发行人的详细资料
# issuerAltName=issuer:copy
# 扩展名的DER十六进制编码:请注意,只有专家才会这样做!
# obj=DER:02:03
# 其中'obj'是一个标准或添加的对象 你甚至可以覆盖一个支持的扩展。
# basicConstraints= critical, DER:30:03:01:01:FF
[ crl_ext ]
# CRL的扩展。
# 在CRL中,只有issuerAltName和authorityKeyIdentifier有任何意义。
# issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always
[ proxy_cert_ext ]
# 在创建代理证书时应添加这些扩展名
# 这违反了PKIX准则,但有些CA会这样做,有些软件也要求这样做,以避免将最终用户的证书解释为CA。
basicConstraints=CA:FALSE
# 这在客户证书的keyUsage中是很典型的。
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# 如果包含在所有证书中,PKIX的建议无关紧要。
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
# 这个东西是针对subjectAltName和issuerAltname的。
# 导入电子邮件地址。
# subjectAltName=email:copy
# 这是一个替代方案,用于生产不被PKIX淘汰的证书。
# subjectAltName=email:move
# 复制主题细节
# issuerAltName=issuer:copy
# 这确实需要一个place,才能成为一个代理证书。
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
####################################################################
[ tsa ]
default_tsa = tsa_config1 # 默认的TSA部分
[ tsa_config1 ]
# 这些仅由TSA回复生成使用。
dir = ./demoCA # TSA根目录
serial = $dir/tsaserial # 当前的序列号(强制)。
crypto_device = builtin # 用于签名的OpenSSL引擎
signer_cert = $dir/tsacert.pem # TSA签署证书(可选)
certs = $dir/cacert.pem # 回复中包含的证书链(可选)
signer_key = $dir/private/tsakey.pem # TSA的私钥(可选)
signer_digest = sha256 # 要使用的签名摘要。(可选)
default_policy = tsa_policy1 # 如果请求没有指定,则为政策(可选)
other_policies = tsa_policy2, tsa_policy3 # 可接受的政策(可选)
digests = sha1, sha256, sha384, sha512 # 可接受的信息摘要(强制)
accuracy = secs:1, millisecs:500, microsecs:100 # (可选)
clock_precision_digits = 0 # 小数点后的数字。 (可选)
ordering = yes # 是否为时间戳定义了排序? (可选,默认:否)
tsa_name = yes # 答复中必须包括TSA的名称吗? (可选,默认:否)
ess_cert_id_chain = no # 是否必须包括ESS证书的ID链?(可选,默认:否)
ess_cert_id_alg = sha1 # 计算证书标识符的算法(可选,默认:sha1)
[insta] # 使用Insta演示CA的CMP
# 信息传输
server = pki.certificate.fi:8700
# proxy = # 根据需要设置,例如: http://192.168.1.1:8080
# tls_use = 0
path = pkix/
# 服务器认证
recipient = "/C=FI/O=Insta Demo/CN=Insta Demo CA" # 或设置srvcert或签发者
ignore_keyusage = 1 # 可能需要的怪癖
unprotected_errors = 1 # 可能需要的怪癖
extracertsout = insta.extracerts.pem
# 客户端认证
ref = 3078 # 用户识别
secret = pass:insta # 可用于客户端和服务器端
# 通用信息选项
cmd = ir # 默认操作,可以在cmd行覆盖,例如:kur
# 证书注册
subject = "/CN=openssl-cmp-test"
newkey = insta.priv.pem
out_trusted = insta.ca.crt
certout = insta.cert.pem
[pbm] # 为Insta CA提供基于密码的保护
# 服务器和客户端认证
ref = $insta::ref # 3078
secret = $insta::secret # 通过:insta
[signature] # 基于签名的Insta CA保护
# 服务器认证
trusted = insta.ca.crt # 不包括keyUsage数字签名。
# 客户端认证
secret = # 禁用PBM
key = $insta::newkey # insta.priv.pem
cert = $insta::certout # insta.cert.pem
[ir]
cmd = ir
[cr]
cmd = cr
[kur]
# 证书更新
cmd = kur
oldcert = $insta::certout # insta.cert.pem
[rr]
# 证书吊销
cmd = rr
oldcert = $insta::certout # insta.cert.pem
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
CipherString = DEFAULT:@SECLEVEL=2
使用步骤:(注意自签证书是会一直提示不受信任的....暂不清楚是哪一步没做好...查了很多资料试了很多方法都不行...)
openssl genrsa -des3 -out ca.key 2048
openssl req -sha256 -new -x509 -days 36500 -key ca.key -out ca.crt
openssl genrsa -des3 -out server.key 2048
openssl req -new -sha256 -key server.key -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=IP:192.168.0.7,DNS:*.violet.ve")) -out server.csr
openssl ca -in server.csr -md sha256 -keyfile ca.key -cert ca.crt -extensions SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=IP:192.168.0.7,DNS:*.violet.ve")) -out server.crt
按以上步骤生成完成后把server.crt
加入nginx
配置,本地安装ca.crt
到受信任的根证书颁发机构
即可
Last modified: 16 十一月 2023