Судя по сообщениям об ошибках, ваш закрытый ключ находится в файле 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
Важно отметить, что эта конкретная кривая несовместима с большинством браузеров или часто используемого клиентского программного обеспечения.
Итак, вот пример создания ключа EC кривой NIST, который совместим с большинством браузеров и часто используемого клиентского программного обеспечения.
Создать ключ 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 работали, как и ожидалось, со всем моим клиентским программным обеспечением.
Протестированное программное обеспечение:
Если вы разрешаете действительные IP-адреса, такие как 10.0.1.0/8
и 10.0.255.255/8
, вы можете использовать монотонно увеличивающееся 32 -битное целое число, подобное этому
# Seed with 10.0.0.0 = 167772160
echo $(( (10<<24) + (0<<16) + (0<<8) + 0 )) >counter
# Read the counter, increment, and produce IP address
read ip <counter
echo $((++ip)) >counter
printf "%d.%d.%d.%d\n" $(( (ip>>24)&255 )) $(( (ip>>16)&255 )) $(( (ip>>8)&255 )) $((ip&255))
Я не вижу способа сделать это в одну строку, но это можно сделать с помощью предложения if
и модульной арифметики.
Что-то вроде этого:
a = 2nd octet
b = 3rd octet
c = 4th octet
if ( mod(c+1, 255) == 0)
if (mod(b+1, 255) == 0)
if (mod(a+1, 255) == 0)
print "sorry, out of IP numbers"
end
b = 0
a = a+1
continue
c = 0
b = b+1
else
c = c+1
print 10.a.b.c
Не проверено, примите это с недоверием.
Мне нравится использовать чтение для разделения октетов:
IFS='.' read -r a b c d <<< 10.0.0.0
ip=$(((a<<24)+(b<<16)+(c<<8)+d))
((ip++))
printf "%d.%d.%d.%d\n" $(((ip>>24)&255)) $(((ip>>16)&255)) $(((ip>>8)&255)) $((ip&255))