Bash -Увеличить IP-адрес, но учесть маску подсети?

Судя по сообщениям об ошибках, ваш закрытый ключ находится в файле 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 работали, как и ожидалось, со всем моим клиентским программным обеспечением.

Протестированное программное обеспечение:

  1. Браузер Brave (0.25.2)
  2. Firefox (60.3.0)
  3. Сильфид (3.7.0)
  4. Рысь (2.8.9выл.1)

0
12.12.2020, 19:18
3 ответа

Если вы разрешаете действительные 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))
4
18.03.2021, 22:43

Я не вижу способа сделать это в одну строку, но это можно сделать с помощью предложения 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

Не проверено, примите это с недоверием.

0
18.03.2021, 22:43

Мне нравится использовать чтение для разделения октетов:

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))
0
27.05.2021, 07:50

Теги

Похожие вопросы