Tutorial Notes Help

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