[Документация Yandex Cloud](../../../index.md) > [Yandex Certificate Manager](../../index.md) > [Пошаговые инструкции](../index.md) > Пользовательский сертификат > Добавление сертификата

# Добавить пользовательский сертификат

Добавление пользовательского сертификата рассмотрим на примере самоподписанного сертификата. Требования к пользовательскому сертификату приведены на странице [Пользовательский сертификат](../../concepts/imported-certificate.md).

## Создание файла самоподписанного сертификата {#create-file}

Чтобы создать самоподписанный сертификат с использованием библиотеки `OpenSSL`, выполните команду:

{% list tabs group=programming_language %}

- Bash {#bash}

  ```bash
  openssl req -x509 -newkey rsa:4096 -nodes \
    -keyout key.pem \
    -out cert.pem \
    -days 365 \
    -subj '/CN=example.com'
  ```

- PowerShell {#powershell}

  ```PowerShell
  openssl req -x509 -newkey rsa:4096 -nodes `
    -keyout key.pem `
    -out cert.pem `
    -days 365 `
    -subj '/CN=example.com'
  ```

{% endlist %}

Где:
* `-x509` — результатом работы команды будет файл сертификата.
* `-newkey` — будет создан новый файл приватного ключа.
* `rsa:4096` — алгоритм и длина ключа.
* `-nodes` — не шифровать файл приватного ключа.
* `-keyout` — имя файла, в котором будет сохранен приватный ключ.
* `-out` — имя файла сертификата.
* `-days` — срок действия сертификата.
* `-subj` — значение Common Name владельца сертификата.

Запущенная с указанными параметрами команда `req` выпустит самоподписанный сертификат, для которого она также сгенерирует приватный ключ.

## Добавление пользовательского самоподписанного сертификата {#create-certificate}

Чтобы добавить пользовательский сертификат в Certificate Manager:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите [каталог](../../../resource-manager/concepts/resources-hierarchy.md#folder), в который будет добавлен пользовательский сертификат.
  1. Перейдите в сервис **Certificate Manager**.
  1. Нажмите кнопку **Добавить сертификат**.
  1. В открывшемся меню выберите **Пользовательский сертификат**.
  1. В открывшемся окне в поле **Имя** введите имя пользовательского сертификата.
  1. (Опционально) В поле **Описание** введите описание пользовательского сертификата.
  1. В поле **Сертификат** нажмите кнопку **Добавить сертификат**.
     1. Выберите способ добавления `Файл`.
     1. Нажмите кнопку **Прикрепить файл**.
        1. В открывшемся окне выберите файл самоподписанного сертификата `cert.pem`.
     1. Нажмите кнопку **Добавить**.
  1. В поле **Приватный ключ** нажмите кнопку **Добавить приватный ключ**.
     1. Выберите способ добавления `Файл`.
     1. Нажмите кнопку **Прикрепить файл**.
        1. В открывшемся окне выберите файл приватного ключа `key.pem`.
     1. Нажмите кнопку **Добавить**.
  1. Нажмите кнопку **Создать**.

- CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  1. Посмотрите описание команды:

     ```bash
     yc certificate-manager certificate create --help
     ```

  1. Выполните команду:

     ```bash
     yc certificate-manager certificate create \
       --name mycert \
       --chain mycert.pem \
       --key mykey.pem
     ```

     Где:
     * `--name` — имя сертификата.
     * `--chain` — путь к файлу цепочки сертификатов.
     * `--key` — путь к файлу приватного ключа сертификата.

     Результат:

     ```text
     id: fpqmg47avvim********
     folder_id: b1g7gvsi89m3********
     created_at: "2020-09-15T06:54:44.916325Z"
     ...
     issued_at: "2020-09-15T06:54:44.916325Z"
     not_after: "2021-09-15T06:48:26Z"
     not_before: "2020-09-15T06:48:26Z"
     ```

- Terraform {#tf}

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.

  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

     ```hcl
     resource "yandex_cm_certificate" "user-certificate" {
       name    = "<имя_сертификата>"

       self_managed {
         certificate = <<-EOT
                       -----BEGIN CERTIFICATE-----
                       <содержимое_сертификата>
                       -----END CERTIFICATE-----
                       EOT
         private_key = <<-EOT
                       -----BEGIN PRIVATE KEY-----
                       <содержимое_приватного_ключа_сертификата>
                       -----END PRIVATE KEY-----
                       EOT
       }
     }
     ```

     Где:
     * `name` — имя сертификата.
     * `certificate` — содержимое файла с [сертификатом](../../concepts/imported-certificate.md).
     * `private_key` — содержимое файла с приватным ключом.

     Подробнее о параметрах ресурса `yandex_cm_certificate` в [документации провайдера](../../../terraform/resources/cm_certificate.md).
  1. Создайте ресурсы:

     1. В терминале перейдите в директорию с конфигурационным файлом.
     1. Проверьте корректность конфигурации с помощью команды:
     
        ```bash
        terraform validate
        ```
     
        Если конфигурация является корректной, появится сообщение:
     
        ```bash
        Success! The configuration is valid.
        ```
     
     1. Выполните команду:
     
        ```bash
        terraform plan
        ```
     
        В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
     1. Примените изменения конфигурации:
     
        ```bash
        terraform apply
        ```
     
     1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

  После этого в указанный каталог будет добавлен сертификат. Проверить появление сертификата и его настройки можно в [консоли управления](https://kz.console.yandex.cloud) или с помощью команды [CLI](../../../cli/quickstart.md):

    ```bash
     yc certificate-manager certificate get <имя_сертификата>
    ```

- API {#api}

  Чтобы добавить сертификат, воспользуйтесь методом REST API [create](../../api-ref/Certificate/create.md) для ресурса [Certificate](../../api-ref/Certificate/index.md) или вызовом gRPC API [CertificateService/Create](../../api-ref/grpc/Certificate/create.md).

{% endlist %}

В списке сертификатов появится новый сертификат со статусом `Issued`.

## Хранение приватного ключа сертификата в Yandex Lockbox {#create-lockbox}

Чтобы не хранить приватный ключ пользовательского сертификата в открытом виде в конфигурационном файле Terraform, запишите его в [Yandex Lockbox](../../../lockbox/index.md):

{% list tabs group=instructions %}

- Terraform {#tf}

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.

  1. [Создайте секрет](../../../lockbox/operations/secret-create.md) и запишите в него приватный ключ.
  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

     ```hcl
     resource "yandex_cm_certificate" "example-lockbox" {
       name = "<имя_секрета>"

       self_managed {
         certificate = <<-EOT
                       -----BEGIN CERTIFICATE-----
                       <содержимое_сертификата>
                       -----END CERTIFICATE-----
                       EOT
         private_key_lockbox_secret {
           id  = "<идентификатор_секрета>"
           key = "<ключ_секрета>"
         }
       }
     }
     ```

     Где:
     * `name` — имя [секрета](../../../lockbox/concepts/secret.md) Yandex Lockbox.
     * `certificate` — содержимое файла с сертификатом.
     * `id` — идентификатор секрета Yandex Lockbox, в котором находится приватный ключ.
     * `key` — ключ секрета Yandex Lockbox, в котором находится приватный ключ.

     Подробнее о параметрах ресурса `yandex_cm_certificate` в [документации провайдера](../../../terraform/resources/cm_certificate.md).
  1. Создайте ресурсы:

     1. В терминале перейдите в директорию с конфигурационным файлом.
     1. Проверьте корректность конфигурации с помощью команды:
     
        ```bash
        terraform validate
        ```
     
        Если конфигурация является корректной, появится сообщение:
     
        ```bash
        Success! The configuration is valid.
        ```
     
     1. Выполните команду:
     
        ```bash
        terraform plan
        ```
     
        В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
     1. Примените изменения конфигурации:
     
        ```bash
        terraform apply
        ```
     
     1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

  После этого в указанный [каталог](../../../resource-manager/concepts/resources-hierarchy.md#folder) будет добавлен сертификат. Проверить появление сертификата и его настройки можно в [консоли управления](https://kz.console.yandex.cloud) или с помощью команды [CLI](../../../cli/index.md):

  ```bash
  yc certificate-manager certificate get <имя_сертификата>
  ```

{% endlist %}

В списке сертификатов появится новый сертификат со статусом `Issued`.