https://tools.ietf.org/html/rfc5280#section-4.1.2.2
Серийный номер ДОЛЖЕН быть положительным целым числом, назначенным СА каждому сертификату.Он ДОЛЖЕН быть уникальным для каждого сертификата, выданного данным СА (т. Е. Имя и серийный номер эмитента определяют уникальный сертификат). ЦС ДОЛЖНЫ сделать так, чтобы serialNumber был неотрицательным целым числом. ...
(выделено мной)
Серийный номерхранится как целочисленное значение DER, которое является байтовым значением с прямым порядком байтов с минимальным байтом.
- {0x79} положительно
- {0x80} отрицательно
- {0x00, 0x80} положительно
Если вы зададите ему значение где serialNumber[0] > 0 && serialNumber[0] < 0x80
, тогда байты останутся как есть.
Если вы зададите ему значение где serialNumber[0] == 0 && serialNumber[1] < 0x79
затем начальный байт удаляется (повторяйте до тех пор, пока не достигнете значения {0x00} или точки, где необходим ноль).
Эти два оператора (слегка наклонно) встроены в The value is interpreted as an unsigned integer of arbitrary size in big-endian byte ordering.
Чтобы персонализировать метод, он говорит: «Мне дали это большое значение, 0xA041A132BD9E58984BCC9EE62717B410
, которое, как я знаю, является большим положительным числом. Теперь мне нужно записать его как целое число DER. Эквивалентный поток байтов равен { 0x00, 0xA0, 0x41, 0xA1, 0x32, 0xBD, 0x9E, 0x58, 0x98, 0x4B, 0xCC, 0x9E, 0xE6, 0x27, 0x17, 0xB4, 0x10 }
.Готово ".