Я пытаюсь воспроизвести вывод команды "openssl dhparam -out dh1024.pem 1024" программно в Java. Фрагмент кода следующий: -
DHParametersGenerator generator = new DHParametersGenerator();
generator.init(1024, 0, new SecureRandom());
DHParameters params = generator.generateParameters();
// Generator G is set as random in params, but it has to be 2 to conform to openssl
DHParameters realParams = new DHParameters(params.getP(), BigInteger.valueOf(2));
byte[] p = realParams.getP().toByteArray();
byte[] g = realParams.getG().toByteArray();
byte[] l = new byte[(byte) realParams.getL()];
byte[] pgl = new byte[p.length+g.length+l.length];
System.arraycopy(p, 0, pgl, 0, p.length);
System.arraycopy(g, 0, pgl, p.length, g.length);
System.arraycopy(l, 0, pgl, p.length+g.length, l.length);
Так что в основном я объединяю значения параметров P, G и L в байтовом массиве "pgl", а затем сохраняю его в файле с использованием класса PEMWriter из BC. Но когда я пытаюсь использовать его через openssl, я получаю следующую ошибку: -
Невозможно загрузить параметры DH из
/etc/openvpn/easy-rsa/keys/dh1024.pem:
ошибка: 0D07207B: кодировка asn1
подпрограммы: ASN1_get_object: заголовок тоже
long: ошибка: 0D068066: кодировка asn1
подпрограммы: ASN1_CHECK_TLEN: плохой объект
заголовок: ошибка: 0D07803A: кодировка asn1
подпрограммы: ASN1_ITEM_EX_D2I: вложенный asn1
ошибка: ошибка: 0906700D: PEM
подпрограммы: PEM_ASN1_read_bio: ASN1 lib
.... что заставляет меня поверить, что я неправильно кодирую параметры DH, но я не могу найти где-нибудь правильный способ кодировать это. Может ли кто-нибудь помочь мне в этом? Я уже несколько дней отскакиваю голову от стены замка, но безрезультатно .... помогите :(