Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как указать GN и SN в TSslCertTools при генерации CSR в Delphi?

Delphi , Синтаксис , Шифрование

Как указать GN и SN в TSslCertTools при генерации CSR в Delphi?

При работе с SSL/TLS сертификатами в Delphi часто возникает необходимость генерации Certificate Signing Request (CSR) с нестандартными полями Subject, такими как Given Name (GN) и Surname (SN). В этой статье мы разберем, как решить эту задачу с использованием компонента TSslCertTools из библиотеки Internet Component Suite (ICS).

Проблема: Отсутствие стандартных свойств для GN и SN

По умолчанию TSslCertTools предоставляет свойства для основных полей Subject:

SslCertTools.CommonName := 'example.com';
SslCertTools.Organization := 'My Company';
SslCertTools.OrgUnit := 'IT Department';
SslCertTools.Locality := 'Montreal';
SslCertTools.State := 'QC';
SslCertTools.Country := 'CA';

Однако для полей GN (2.5.4.42) и SN (2.5.4.4) стандартные свойства отсутствуют.

Решение 1: Использование обновленного TSslCertTools (рекомендуется)

Начиная с версии ICS, которая включает правки от 15 июля 2025 года, были добавлены новые свойства:

// Delphi-пример
var
  SslCertTools: TSslCertTools;
begin
  SslCertTools := TSslCertTools.Create(nil);
  try
    SslCertTools.CommonName := 'John Doe';
    SslCertTools.GivenName := 'John';  // Новое свойство GN
    SslCertTools.Surname := 'Doe';     // Новое свойство SN
    SslCertTools.GenerateReq;
    // Сохраняем CSR
    SslCertTools.SaveReqToFile('request.csr');
  finally
    SslCertTools.Free;
  end;
end;

Важно: Убедитесь, что у вас актуальная версия ICS. Для проверки используйте OverbyteIcsPemtool из папки Samples\delphi\PemTool.

Решение 2: Ручное добавление полей через OID (для старых версий ICS)

Если обновление библиотеки невозможно, используйте низкоуровневые функции OpenSSL:

uses
  OverbyteIcsSslX509Utils, OverbyteIcsSslUtils;

procedure AddCustomSubjectEntries;
var
  Req: PX509_REQ;
  Name: PX509_NAME;
  ObjGN, ObjSN: PASN1_OBJECT;
begin
  Req := X509_REQ_new();
  try
    Name := X509_REQ_get_subject_name(Req);

    // Добавляем GN (Given Name)
    ObjGN := OBJ_txt2obj('2.5.4.42', 1); // OID для GN
    X509_NAME_add_entry_by_OBJ(Name, ObjGN, MBSTRING_ASC, 'John', -1, -1, 0);
    ASN1_OBJECT_free(ObjGN);

    // Добавляем SN (Surname)
    ObjSN := OBJ_txt2obj('2.5.4.4', 1);  // OID для SN
    X509_NAME_add_entry_by_OBJ(Name, ObjSN, MBSTRING_ASC, 'Doe', -1, -1, 0);
    ASN1_OBJECT_free(ObjSN);

    // Генерируем и сохраняем CSR
    // ... (добавьте код для генерации ключа и подписи CSR)
  finally
    X509_REQ_free(Req);
  end;
end;

Как проверить результат

Используйте OpenSSL для просмотра CSR:

openssl req -in request.csr -noout -text

В выводе должны присутствовать:

Subject: GN = John, SN = Doe, CN = John Doe

Альтернативный подход: Расширение TSslCertTools

Для проектов, требующих частого добавления кастомных полей, создайте потомок TSslCertTools:

type
  TCustomCertTools = class(TSslCertTools)
  private
    FGivenName: string;
    FSurname: string;
  public
    procedure GenerateReq; override;
    property GivenName: string read FGivenName write FGivenName;
    property Surname: string read FSurname write FSurname;
  end;

procedure TCustomCertTools.GenerateReq;
begin
  inherited;
  if FGivenName <> '' then
    AddNameEntryByTxt(X509_REQ_get_subject_name(FReq), 'GN', FGivenName);
  if FSurname <> '' then
    AddNameEntryByTxt(X509_REQ_get_subject_name(FReq), 'SN', FSurname);
end;

Заключение

  1. Для новых проектов используйте обновленную версию ICS с поддержкой GivenName и Surname.
  2. Для legacy-систем применяйте ручное добавление полей через OID.
  3. Всегда проверяйте CSR через OpenSSL или утилиты вроде PemTool.

Примеры кода из статьи работают в Delphi 10.4+ и совместимы с OpenSSL 1.1.x/3.x. Актуальную версию ICS всегда можно найти на официальном GitHub.

Создано по материалам из источника по ссылке.

Контекст статьи посвящён методам добавления полей Given Name (GN) и Surname (SN) в запрос на подпись сертификата (CSR) при использовании компонента TSslCertTools в Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шифрование ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 17:14:06
2026-06-29 18:36:51/0.0039820671081543/0