Аксенов Алексей
                                                                Март 2025
Free Gost CA

Этот УЦ предназначен для выпуска тестовых сертификатов по стандарту X509.
Интерфейс для выпуска реализован по стандарту REST API. 
Автоматическая документация сделана по стандартам Swagger.

Документация Swagger

Документация в HTML

Предыстория проекта

Презентация проекта

					

					
						
Описание обычного шаблона сертификата.

Шаблон представляет собой текст в формате json и содержит обязательные поля:
NotBefore - Дата начала действия
NotAfter - Дата окончания действия
Subject - Субъект сертификата
Extensions - Расширения сертификата.

Поле Subject - это список элементов имени (RDN)
Каждый элемент имени состоит из двух полей 
  Id - Идентификатор элемента
  Name - Содержимое элемента
Идентификаторы элементов поддерживаются следующие:
  uniqueID, DC, ОГРН, ОГРНИП, СНИЛС, ИННЮЛ, ИНН, E, unstructuredName, unstructuredAddress, O, OU, T, description, searchGuide, businessCategory, postalAddress, postalCode, postOfficeBox, physicalDeliveryOfficeName, telephoneNumber, telexNumber, teletexTerminalIdentifier, facsimileTelephoneNumber, x121Address, internationalISDNNumber, registeredAddress, destinationIndicator, preferredDeliveryMethod, presentationAddress, CN, supportedApplicationContext, member, owner, roleOccupant, seeAlso, userPassword, SN, name, G, I, generationQualifier, x500UniqueIdentifier, dnQualifier, enhancedSearchGuide, protocolInformation, distinguishedName, SERIALNUMBER, uniqueMember, houseIdentifier, dmdName, C, L, ST, S, STREET

Пример простого шаблона без расширений:
{
  "notBefore": "2024-04-20T17:24:15.272Z",
  "notAfter": "2044-04-20T17:24:15.272Z",
  "subject": [
    { "id": "E", "name": "mail@mail.ru" },
    { "id": "CN", "name": "Подписант Подписантыч 6" },
    { "id": "O", "name": "Микрософт" },
    { "id": "L", "name": "Москва" },
    { "id": "S", "name": "77 Москва" },
    { "id": "STREET", "name": "Крылатская улица" },
    { "id": "SN", "name": "Алексеев" },
    { "id": "G", "name": "Алексей" },
    { "id": "ИННЮЛ", "name": "7733223344" },
    { "id": "ОГРН", "name": "1177666554433" },
    { "id": "СНИЛС", "name": "07998877665" },
    { "id": "C", "name": "RU" }
  ],
  "extensions": []
}


					

					

Расширения поддерживаются следующие.

* KeyUsage - Использование ключа
  Значения - один или несколько идентификаторов использования ключа : digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement, keyCertSign, cRLSign, encipherOnly, decipherOnly

* ExtendedKeyUsage - Расширенное использование ключа
  Значения - один или несколько идентификаторов расширенного использования ключа в виде объектных идентификаторов. Нет ограничений на используемые объектные идентификаторы, вы можете указать любые

* PrivateKeyUsagePeriod - Срок действия закрытого ключа
  Значения - строго две строки. В первой строке - дата начала действия, во второй строке - дата окончания действия. Формат дат можно уточнить тут

* CertificatePolicies - Политики сертификата
  Значения - один или несколько идентификаторов политики сертификата в виде объектных идентификаторов. Нет ограничений на используемые объектные идентификаторы, вы можете указать любые

* IssuerSignTool - Средства электронной подписи и УЦ издателя сертификата
  Значения - одна или несколько строк, в каждой строке указывается очередное используемое средство

* SubjectSignTool - Средства электронной подписи владельца сертификата
  Значения - строго одна строка с используемым средством

* IdentificationKind - Тип идентификации при выдаче сертификата
  Значения - один или несколько идентификаторов способов идентификации : Personal, RemoteCert, RemotePassport, RemoteSystem 

* OCSPNoCheck - Запрет на проверку этого сертификата в службе OCSP
  Значения - отсуствуют. Оставьте поле пустым

* CertificateTransparencyPoison - Запрет на использование этого сертификата в сервисах TLS (отрава)
  Значения - отсуствуют. Оставьте поле пустым

* DelegatedCredentials - Делегированные полномочия для TLS и DTLS
  Значения - отсуствуют. Оставьте поле пустым

					

					

* TLSFeature - Возможности TLS
  Значения - один или несколько идентификаторов возможностей : server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, status_request, user_mapping, client_authz, server_authz, cert_type, supported_groups, ec_point_formats, srp, signature_algorithms, use_srtp, heartbeat, application_layer_protocol_negotiation, status_request_v2, signed_certificate_timestamp, client_certificate_type, server_certificate_type, padding, encrypt_then_mac, extended_master_secret, token_binding, cached_info, tls_lts, compress_certificate, record_size_limit, pwd_protect, pwd_clear, password_salt, ticket_pinning, tls_cert_with_extern_psk, delegated_credential, session_ticket, TLMSP, TLMSP_proxying, TLMSP_delegate, supported_ekt_ciphers, Reserved1, pre_shared_key, early_data, supported_versions, cookie, psk_key_exchange_modes, Reserved2, certificate_authorities, oid_filters, post_handshake_auth, signature_algorithms_cert, key_share, transparency_info, connection_id_deprecated, connection_id, external_id_hash, external_session_id, quic_transport_parameters, ticket_request, dnssec_chain, sequence_number_encryption_algorithms, rrc, tls_flags 

* InhibitAnyPolicy - Настройка политик для сертификата выдающего УЦ
  Значения - одна строка, в которой должна быть цифра, определяющее количество пропускаемых сертификатов в цепочке

* CertificateTemplateName - Имя шаблона сертификата
  Значения - одна строка, в которой должно быть имя шаблона

* SubjectAlternativeName - Альтернативное имя субъекта
  Значения - одна или несколько строк. Можно указывать либо DNS имена, либо IP адреса

* NetscapeBaseUrl - Netscape. Базый адрес
  Значения - одна строка, в которой должен быть адрес

* NetscapeCaPolicyUrl - Netscape. Адрес до документа политики УЦ
  Значения - одна строка, в которой должен быть адрес

* NetscapeCaRevocationUrl - Netscape. Адрес сервиса отзыва сертификата УЦ
  Значения - одна строка, в которой должен быть адрес

* NetscapeCertificateType - Netscape. Тип сертификата
  Значения - идентификаторы типа сертификата :  SSLClientCertificate, SSLServerCertificate, SMIMECertificate, ObjectSigningCertificate, Reserved, SSLCACertificate, SMIMECACertificate, ObjectSigningCACertificate

* NetscapeCertRenewalUrl - Netscape. Адрес сервиса замены сертификата
  Значения - одна строка, в которой должен быть адрес

* NetscapeComment - Netscape. Комментарий
  Значения - одна строка, в которой должен комментарий

* NetscapeRevocationUrl - Netscape. Адрес сервиса отзыва сертификата
  Значения - одна строка, в которой должен быть адрес

* NetscapeSslServerName - Netscape. Имя сервера для SSL
  Значения - одна строка, в которой должн быть имя сервера
					

					

* AppleApplicationIntegrationIntermediate - Apple. Промежуточный сертификат для интеграции приложений
  Значения - отсуствуют. Оставьте поле пустым

* AppleDeveloperIdApplication - Apple. Идентификатор приложения
  Значения - отсуствуют. Оставьте поле пустым

* AppleDeveloperIdDate - Apple. Дата регистрации разработчика
  Значения - отсуствуют. Оставьте поле пустым

* AppleDeveloperIdInstaller - Apple. Разрешение на установку приложений
  Значения - отсуствуют. Оставьте поле пустым

* AppleSoftwareSigning - Apple. Разрешение на подпись ПО
  Значения - отсуствуют. Оставьте поле пустым

					

					
Пример шаблона с раширениями

{
  "notBefore": "2024-04-20T17:24:15.272Z",
  "notAfter": "2044-04-20T17:24:15.272Z",
  "subject": [
    { "id": "CN", "name": "Подписант Подписантыч 6" },
    { "id": "ИННЮЛ", "name": "7733223344" },
    { "id": "СНИЛС", "name": "07998877665" },
    { "id": "C", "name": "RU" }
  ],
  "extensions": [
    {
      "name": "ExtendedKeyUsage",
      "values": [ "1.3.6.1.5.5.7.3.2", "1.3.6.1.5.5.7.3.3", "1.3.6.1.5.5.7.3.4", "1.3.6.1.4.1.311.20.2.2" ]
    },
    {
      "name": "CertificatePolicies",
      "values": [ "1.2.643.100.113.1", "1.2.643.100.113.2", "1.2.643.100.113.3" ]
    },
    {
      "name": "PrivateKeyUsagePeriod",
      "values": [ "2024-04-20T17:24:15.272Z", "2044-04-20T17:24:15.272Z" ]
    },
    {
      "critical": true,
      "name": "KeyUsage",
      "values": [ "digitalSignature", "nonRepudiation", "keyEncipherment",  "dataEncipherment" ]
    },
    {
      "name": "IssuerSignTool",
      "values": [
          "Средство электронной подписи: СКЗИ \"КриптоПро CSP\" версия 4.0 R4 (исполнение 2-Base)",
          "Заключение на средство УЦ: Сертификат соответствия № СФ/128-4272 от 13.07.2022",
          "Средство УЦ: ПАК «Удостоверяющий центр «КриптоПро УЦ» версии 2.0» (вариант исполнения 9)",
          "Заключение на средство ЭП: Сертификат соответствия № СФ/124-3971 от 15.01.2021"
      ]
    },
    {
      "name": "SubjectSignTool",
      "values": [ "Средство электронной подписи: СКЗИ \"КриптоПро CSP\"" ]
    },
    {
      "name": "IdentificationKind",
      "values": [ "RemoteSystem" ]
    }
  ]
}
					

					
Описание серверного шаблона сертификата.

Серверный шаблон сертификата имеет теже самые поля что и обычный шаблон, 
за исключением дополнительного поля - ServerExtensions. В этом поле описываются
способы создания серверных расширений и их наличие в выдаваемом сертификате.

Серверные расширения.

* AuthorityInformationAccess - Доступ к информации о центрах сертификации
Critical - признак критичности расширения
OCSPUrlAddressEnabled - нужно ли включать в расширение адрес сервиса OCSP
IssuerUrlAddressEnabled - нужно ли включать в расширение адрес загрузки корневого сертификата

* CRLDistributionPoints - Точки распространения списков отзыва
Critical - признак критичности расширения
DistributionPointEnabled - нужно ли включать в расширение адрес загрузки списка отзыва
Reasons - Причины прекращения действия сертификатов, по которым будет информация в списке отзыва
CRLIssuerEnabled - нужно ли включать в расширение имя издателя списка отзыва

* SubjectKeyIdentifier - Идентификатор ключа субъекта
Critical - признак критичности расширения

* AuthorityKeyIdentifier - Идентификатор ключа субъекта
Critical - признак критичности расширения
KeyIdentifierEnabled - нужно ли включать в расширение идентификатор издателя
AuthorityCertIssuerEnabled - нужно ли включать в расширение имя предка издателя
AuthorityCertSerialNumberEnabled - нужно ли включать в расширение серийный номер сертификата издателя
					

					
Пример серверного шаблона сертификата.
{
  "notBefore": "2024-04-20T17:24:15.272Z",
  "notAfter": "2044-04-20T17:24:15.272Z",
  "subject": [
    { "id": "CN", "name": "Подписант Подписантыч 6" },
    { "id": "ИННЮЛ", "name": "7733223344" },
    { "id": "СНИЛС", "name": "07998877665" },
    { "id": "C", "name": "RU" }
  ],
  "extensions": [
    {
      "name": "ExtendedKeyUsage",
      "values": [ "1.3.6.1.5.5.7.3.2", "1.3.6.1.5.5.7.3.3", "1.3.6.1.5.5.7.3.4", "1.3.6.1.4.1.311.20.2.2" ]
    },
    {
      "critical": true,
      "name": "KeyUsage",
      "values": [ "digitalSignature", "nonRepudiation", "keyEncipherment",  "dataEncipherment" ]
    }
  ],
  "serverExtensions": {
    "subjectKeyIdentifier": {
      "critical": false
    },
    "authorityInformationAccess": {
      "critical": false,
      "ocspUrlAddressEnabled": false,
      "issuerUrlAddressEnabled": true
    },
    "crlDistributionPoints": {
      "critical": false,
      "distributionPointEnabled": true,
      "reasons": null,
      "crlIssuerEnabled": false
    },
    "authorityKeyIdentifier": {
      "critical": false,
      "keyIdentifierEnabled": true,
      "authorityCertIssuerEnabled": true,
      "authorityCertSerialNumberEnabled": true
    }
  }
}