如何在 CentOS 7.6 上使用使用椭圆曲线密钥 BrainpoolP384t1 签名的自签名证书运行 apache httpd 2.4.6?

如何在 CentOS 7.6 上使用使用椭圆曲线密钥 BrainpoolP384t1 签名的自签名证书运行 apache httpd 2.4.6?

我正在尝试使用使用椭圆曲线密钥 BrainpoolP384t1 签名的自签名证书在 CentOS 7.6 上运行 apache httpd 2.4.6,但 apache 不接受此作为有效密钥。我确保所有指令都指向正确的地方。唯一的问题是 apache 无法识别该密钥是否有效。密钥未加密。

当我到达 ssl_error_log 文件时,我得到这个(使用 pkcs8):

[2018 年 12 月 16 日星期日 15:15:36.020090] [ssl:error] [pid 8379:tid 140184667797632] AH02203: Init: 找不到私钥 [2018 年 12 月 16 日星期日 15:15:36.020246] [ssl:error] [pid 8379 :tid 140184667797632] SSL 库错误:错误:0D0680A8:asn1 编码例程:ASN1_CHECK_TLEN:错误标签 [Sun Dec 16 15:15:36.020297 2018] [ssl:error] [pid 8379:tid 140184667797632] SSL 库错误: :0D08303A :asn1 编码例程:ASN1_TEMPLATE_NOEXP_D2I:嵌套 asn1 错误 [Sun Dec 16 15:15:36.020327 2018] [ssl:error] [pid 8379:tid 140184667797632] SSL 库错误:错误:0D0680A8:asn1 编码例程:ASN1_CHECK_TL CN:标签错误[ Sun Dec 16 15:15:36.020356 2018] [ssl:error] [pid 8379:tid 140184667797632] SSL 库错误:错误:0D07803A:asn1 编码例程:ASN1_ITEM_EX_D2I:嵌套 asn1 错误(类型 = RSA)[Sun Dec 16 15: 15:36.020386 2018] [SSL:错误] [PID 8379:TID 140184667797632] SSL库错误:错误:04093004:RSA例程:RSA例程:old_rsa_priv_decode:rsa lib [rsa lib:rsa lib [rsa lib [sun dec 16 15:15:15:15:36.0202020415 2018:SS] 8379:tid 140184667797632] SSL库错误:错误:0D0680A8:asn1编码例程:ASN1_CHECK_TLEN:错误标签[Sun Dec 16 15:15:36.020444 2018] [ssl:错误] [pid 8379:tid 140184667797632]库错误: 错误: 0D07803A:asn1 编码例程:ASN1_ITEM_EX_D2I:嵌套 asn1 错误 (Type=PKCS8_PRIV_KEY_INFO)

没有 pkcs8

[2018年12月17日星期一01:24:47.455770] [ssl:错误] [pid 18124:tid 139679037429888] AH02203:初始化:找不到私钥[2018年12月17日星期一01:24:47.455902] [ssl:错误] [pid 18124 :tid 139679037429888] SSL 库错误: 错误:0D0680A8:asn1 编码例程:ASN1_CHECK_TLEN:错误标签 [Mon Dec 17 01:24:47.456051 2018] [ssl:error] [pid 18124:tid 139679037429888] SSL 库错误:错误:0D08303A :asn1编码例程:ASN1_TEMPLATE_NOEXP_D2I:嵌套asn1错误[Mon Dec 17 01:24:47.456090 2018] [ssl:error] [pid 18124:tid 139679037429888] SSL库错误:错误:0D0680A8:asn1编码例程:ASN1_CHECK_ TLEN:标签错误[ Mon Dec 17 01:24:47.456121 2018] [ssl:error] [pid 18124:tid 139679037429888] SSL 库错误:错误:0D07803A:asn1 编码例程:ASN1_ITEM_EX_D2I:嵌套 asn1 错误(类型 = RSA)[Mon Dec 17 01: 24:47.456152 2018] [ssl:错误] [pid 18124:tid 139679037429888] SSL库错误:错误:04093004:rsa例程:OLD_RSA_PRIV_DECODE:RSA lib [2018年12月17日星期一01:24:47.456180] [ssl:错误] [ PID 18124:tid 139679037429888] SSL库错误:错误:0D0680A8:asn1编码例程:ASN1_CHECK_TLEN:错误标签[Mon Dec 17 01:24:47.456210 2018] [ssl:错误] [pid 18124:tid 139679037429888 ] SSL 库错误:错误: 0D07803A:asn1 编码例程:ASN1_ITEM_EX_D2I:嵌套 asn1 错误 (Type=PKCS8_PRIV_KEY_INFO)

注意:我已经使用使用 aes-256-cbc 加密的 rsa 密钥运行了它,但现在我想要使用 ec 密钥。

答案1

从错误消息来看,您的私钥似乎位于 pkcs#8 文件中。从RFC5958私钥可能采用 DER 格式:

  Interoperability considerations:

     The PKCS #8 object inside this media type MUST be DER-encoded
     PrivateKeyInfo.

因此,您可能需要将私钥转换为 PEM 格式:

openssl pkey -inform DER -in key.p8 -outform PEM -out key.pem


从您的问题中不清楚您是如何创建密钥和证书的。这是一个在我的 Debian Buster 系统上运行的简单示例。

创建椭圆曲线私钥

openssl ecparam -out ec_key.pem -name brainpoolP384t1 -genkey

openssl pkey -in ec_key.pem -text

-----BEGIN PRIVATE KEY-----
MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBDASBnjCBmwIBAQQwKTnt9uvr1aJS
tXEsz3MCtPbojeYvDKOXm9eEllpsErzSdeBUs0c7kyJYnY00N9pwoWQDYgAED2+w
xryVMzZh/nW6mUx3WxWTjXf02/17sZPpkKHcqtj3TObcA7yjpwNs+PriRBEkiyuU
jbXdeTjr79xTLcElXIvJkEp5vu4qijBQ8CRdqc5BZgGWw0vV84xNtB5xKOpc
-----END PRIVATE KEY-----
Private-Key: (384 bit)
priv:
    29:39:ed:f6:eb:eb:d5:a2:52:b5:71:2c:cf:73:02:
    b4:f6:e8:8d:e6:2f:0c:a3:97:9b:d7:84:96:5a:6c:
    12:bc:d2:75:e0:54:b3:47:3b:93:22:58:9d:8d:34:
    37:da:70
pub:
    04:0f:6f:b0:c6:bc:95:33:36:61:fe:75:ba:99:4c:
    77:5b:15:93:8d:77:f4:db:fd:7b:b1:93:e9:90:a1:
    dc:aa:d8:f7:4c:e6:dc:03:bc:a3:a7:03:6c:f8:fa:
    e2:44:11:24:8b:2b:94:8d:b5:dd:79:38:eb:ef:dc:
    53:2d:c1:25:5c:8b:c9:90:4a:79:be:ee:2a:8a:30:
    50:f0:24:5d:a9:ce:41:66:01:96:c3:4b:d5:f3:8c:
    4d:b4:1e:71:28:ea:5c
ASN1 OID: brainpoolP384t1

值得注意的是,这条特定的曲线不兼容与大多数浏览器或常用的客户端软件兼容。

因此,这是生成 NIST 曲线 EC 密钥的示例,其中兼容适用于大多数浏览器和常用的客户端软件。

创建 NIST EC 密钥

openssl ecparam -out ec_key_nist.pem -name secp384r1 -genkey

openssl pkey -in ec_key_nist.pem -text

-----BEGIN PRIVATE KEY-----
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDB1sa6wudssPDi6sfEg
V7J4xTkn3WF4veaMbcw4GAcL8PUrciXjt5jg8J3wbyvB9ZGhZANiAARLBE/WuM1e
DjYNETD+2oEoej6ZbhDvIRbxqxBBuvVna1hQQW76h3MsavEtBNbkAQZHQ9KZCScg
td5N/OhqQ+K7qXSr7F0KHTp49D9grufK+R6/uNoXtT8yiHO5yAI4lok=
-----END PRIVATE KEY-----
Private-Key: (384 bit)
priv:
    75:b1:ae:b0:b9:db:2c:3c:38:ba:b1:f1:20:57:b2:
    78:c5:39:27:dd:61:78:bd:e6:8c:6d:cc:38:18:07:
    0b:f0:f5:2b:72:25:e3:b7:98:e0:f0:9d:f0:6f:2b:
    c1:f5:91
pub:
    04:4b:04:4f:d6:b8:cd:5e:0e:36:0d:11:30:fe:da:
    81:28:7a:3e:99:6e:10:ef:21:16:f1:ab:10:41:ba:
    f5:67:6b:58:50:41:6e:fa:87:73:2c:6a:f1:2d:04:
    d6:e4:01:06:47:43:d2:99:09:27:20:b5:de:4d:fc:
    e8:6a:43:e2:bb:a9:74:ab:ec:5d:0a:1d:3a:78:f4:
    3f:60:ae:e7:ca:f9:1e:bf:b8:da:17:b5:3f:32:88:
    73:b9:c8:02:38:96:89
ASN1 OID: secp384r1
NIST CURVE: P-384

创建自签名服务器证书

生成密钥后,自签名服务器证书就是一个单行证书:

openssl req -new -key ec_key.pem -x509 -nodes -days 365 -out cert.pem

使用两个 EC 密钥进行测试后,确认该brainpoolP384t1曲线对于我的任何浏览器都不起作用。然而,NIST EC 密钥和证书在我的所有客户端软件上都按预期工作。

测试软件:

  1. 勇敢的浏览器 (0.25.2)
  2. 火狐浏览器 (60.3.0)
  3. 仙女 (3.7.0)
  4. 山猫 (2.8.9rel.1)

相关内容