Создайте хранилища ключей и доверенные хранилища для частного облака версии 4.17.09 и более ранних версий.

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

В этом документе описывается, как создавать, изменять и удалять хранилища ключей и доверенные хранилища для Edge для частного облака версии 4.17.09 и более ранних версий.

О хранилищах ключей и хранилищах доверенных сертификатов

Хранилища ключей и хранилища доверенных сертификатов определяют хранилища сертификатов безопасности, используемых для шифрования TLS. Основное различие между ними заключается в том, где они используются в процессе установления связи TLS:

  • Хранилище ключей содержит сертификат TLS и закрытый ключ, используемый для идентификации объекта во время установления связи TLS.

    В одностороннем TLS, когда клиент подключается к конечной точке TLS на сервере, хранилище ключей сервера предоставляет клиенту сертификат сервера (публичный сертификат). Затем клиент проверяет этот сертификат в центре сертификации (CA), например Symantec или VeriSign.

    В двустороннем TLS и клиент, и сервер поддерживают хранилище ключей со своим собственным сертификатом и закрытым ключом, используемым для взаимной аутентификации.
  • Хранилище доверенных сертификатов содержит сертификаты, используемые для проверки сертификатов, полученных в ходе установления связи TLS.

    В одностороннем TLS хранилище доверенных сертификатов не требуется, если сертификат подписан действительным центром сертификации. Если сертификат, полученный клиентом TLS, подписан действительным центром сертификации, клиент отправляет запрос в центр сертификации для проверки подлинности сертификата. Клиент TLS обычно использует хранилище доверенных сертификатов для проверки самозаверяющих сертификатов, полученных от сервера TLS, или сертификатов, не подписанных доверенным центром сертификации. В этом сценарии клиент заполняет свое хранилище доверенных сертификатов сертификатами, которым он доверяет. Затем, когда клиент получает сертификат сервера, входящий сертификат проверяется на соответствие сертификатам в его хранилище доверенных сертификатов.

    Например, клиент TLS подключается к серверу TLS, где сервер использует самозаверяющий сертификат. Поскольку это самозаверяющий сертификат, клиент не может проверить его в центре сертификации. Вместо этого клиент предварительно загружает самозаверяющий сертификат сервера в свое хранилище доверенных сертификатов. Затем, когда клиент пытается подключиться к серверу, клиент использует свое хранилище доверенных сертификатов для проверки сертификата, полученного от сервера.

    Для двустороннего TLS и клиент TLS, и сервер TLS могут использовать хранилище доверенных сертификатов. Хранилище доверенных сертификатов требуется при выполнении двустороннего TLS, когда Edge выступает в качестве сервера TLS.

Сертификаты могут быть выданы центром сертификации (CA) или они могут быть самоподписанными с помощью сгенерированного вами закрытого ключа. Если у вас есть доступ к центру сертификации, следуйте инструкциям вашего центра сертификации по созданию ключей и выдаче сертификатов. Если у вас нет доступа к центру сертификации, вы можете создать самозаверяющий сертификат с помощью одного из многих общедоступных бесплатных инструментов, таких как openssl.

Реализация хранилища ключей и хранилища доверенных сертификатов в Edge

В Edge хранилище ключей содержит один или несколько файлов JAR, причем файл JAR содержит:

  • Сертификат TLS в виде файла PEM — либо сертификат, подписанный центром сертификации (ЦС), либо цепочка сертификатов, в которой последний сертификат подписан ЦС, либо самозаверяющий сертификат.
  • Закрытый ключ в виде PEM-файла. Edge поддерживает размеры ключей до 2048 бит. Парольная фраза не является обязательной.

Хранилище доверенных сертификатов похоже на хранилище ключей, за исключением того, что оно содержит только сертификаты в виде PEM-файла, но не содержит закрытых ключей.

Если сертификат является частью цепочки, то хранилище ключей/доверенное хранилище должно содержать все сертификаты в цепочке либо в виде отдельных файлов PEM, либо в виде одного файла. Если вы используете один файл, сертификаты должны быть расположены по порядку: первым сертификатом в файле является сертификат, используемый для TLS, за которым следует цепочка сертификатов по порядку до сертификата CA. Вы должны вставить пустую строку между каждым сертификатом в файле.

Edge предоставляет API, который вы используете для создания хранилищ ключей и хранилищ доверенных сертификатов. Фактические API одинаковы. Разница в том, что при создании хранилища ключей вы передаете файл JAR, содержащий сертификат и закрытый ключ. Когда вы создаете хранилище доверенных сертификатов, вы передаете только сертификат в виде файла PEM.

О формате файлов сертификатов и ключей

В примерах в этом документе показаны сертификат и ключ TLS, определенные как файлы PEM, соответствующие формату X.509. Если ваш сертификат или закрытый ключ не определен в файле PEM, вы можете преобразовать его в файл PEM с помощью таких утилит, как openssl.

Однако многие файлы .crt и .key уже имеют формат PEM. Если эти файлы являются текстовыми файлами и заключены в:

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

или:

-----BEGIN ENCRYPTED PRIVATE KEY-----
-----END ENCRYPTED PRIVATE KEY-----

Тогда файлы будут совместимы с форматом PEM, и вы сможете использовать их в хранилище ключей или доверенном хранилище без преобразования в файл PEM.

Если у вас есть цепочка сертификатов и вы хотите использовать ее в хранилище ключей или доверенном хранилище, вы можете объединить все сертификаты в один файл PEM с новой строкой между каждым сертификатом. Сертификаты должны быть в порядке, и последний сертификат должен быть корневым сертификатом или промежуточным сертификатом, подписанным корневым сертификатом:

-----BEGIN CERTIFICATE-----
(Your Primary TLS certificate)
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
(Intermediate certificate)
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
(Root certificate or intermediate certificate signed by a root certificate)
-----END CERTIFICATE-----

Получить подробную информацию о существующем хранилище ключей

Проверьте свою среду на наличие существующих хранилищ ключей с помощью API List Keystores and Truststores :

curl -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-u email:password

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

[ "freetrial" ]

Вы можете использовать это хранилище ключей по умолчанию для тестирования своих API и внедрения своих API в рабочую среду, но перед развертыванием в рабочей среде обычно вы создаете собственное хранилище ключей с собственным сертификатом и ключом.

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

Проверьте содержимое хранилища ключей с помощью API Get a Keystore или Truststore . Для облачного клиента вы должны увидеть один сертификат TLS сервера — сертификат по умолчанию, который Apigee Edge предоставляет для бесплатных пробных учетных записей.

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial \
-u email:password

Ответ должен выглядеть следующим образом:

{
 "certs" : [ "wildcard.apigee.net.crt" ],
 "keys" : [ "freetrial" ],
 "name" : "freetrial"
}

Вы также можете просмотреть эту информацию в пользовательском интерфейсе управления Edge:

  1. Войдите в пользовательский интерфейс управления Edge по адресу https://enterprise.apigee.com (облако) или http://<ms-ip>:9000 (локально), где <ms-ip> — это IP-адрес управления. Серверный узел.
  2. В меню пользовательского интерфейса управления Edge выберите «Администратор» > «Сертификаты TLS» .

Получить сведения о сертификате TLS

Вы можете использовать API получения сведений о сертификате из хранилища ключей или хранилища доверенных сертификатов , чтобы просмотреть сведения о сертификатах TLS в хранилище ключей, например дату истечения срока действия и эмитента. Сначала получите имя сертификата, который вас интересует. В этом примере извлекается информация для хранилища ключей под названием «freetrial».

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial \
-u email:password

Пример ответа:

{
 "certs" : [ "wildcard.apigee.net.crt" ],
 "keys" : [ "freetrial" ],
 "name" : "freetrial"
}

Затем используйте значение свойства certs, чтобы получить сведения о сертификате:

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial/certs/wildcard.apigee.net.crt \
-u email:password

Пример ответа:

{
 "certInfo" : [ {
   "expiryDate" : "Wed, 23 Apr 2014 20:50:02 UTC",
   "isValid" : "Yes",
   "issuer" : "CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O=&quot;GoDaddy.com, Inc.&quot;, L=Scottsdale, ST=Arizona, C=US",
   "subject" : CN=*.example.apigee.net, OU=Domain Control Validated",
   "subjectAlternativeNames" : ["*.example.apigee.net","*.example.apigee.net" ],
   "validFrom" : "Tue, 15 Apr 2014 09:17:03 UTC",
   "version" : 3
 } ],
 "name" : "example.apigee.net.crt"
}

Вы также можете просмотреть эту информацию в пользовательском интерфейсе управления Edge:

  1. Войдите в пользовательский интерфейс управления Edge по адресу https://enterprise.apigee.com (облако) или http://<ms-ip>:9000 (локально), где <ms-ip> — это IP-адрес управления. Серверный узел.
  2. В меню пользовательского интерфейса управления Edge выберите «Администратор» > «Сертификаты TLS» .

В пользовательском интерфейсе Edge вы можете указать, насколько заранее Edge укажет, что срок действия сертификата истекает. По умолчанию пользовательский интерфейс выделяет все сертификаты, срок действия которых истекает в ближайшие 10 дней.

Создать хранилище ключей

Хранилище ключей зависит от среды вашей организации, например тестовой или рабочей среды. Поэтому, если вы хотите протестировать хранилище ключей в тестовой среде перед его развертыванием в производственной среде, вам необходимо создать его в обеих средах.

Создание хранилища ключей представляет собой двухэтапный процесс:

  1. Создайте файл JAR, содержащий ваш сертификат и закрытый ключ.
  2. Создайте хранилище ключей и загрузите файл JAR.

Создайте файл JAR, содержащий ваш сертификат и закрытый ключ.

Создайте файл JAR с вашим закрытым ключом, сертификатом и манифестом. Файл JAR должен содержать следующие файлы и каталоги:

/META-INF/descriptor.properties
myCert.pem
myKey.pem

В каталоге, содержащем вашу пару ключей и сертификат, создайте каталог с именем /META-INF . Затем создайте файл descriptor.properties в /META-INF со следующим содержимым:

certFile={myCertificate}.pem
keyFile={myKey}.pem

Создайте файл JAR, содержащий вашу пару ключей и сертификат:

jar -cf myKeystore.jar myCert.pem myKey.pem

Добавьте descriptor.properties в ваш JAR-файл:

jar -uf myKeystore.jar META-INF/descriptor.properties

Создайте хранилище ключей и загрузите файл JAR.

Чтобы создать хранилище ключей в среде, вам нужно только указать имя хранилища ключей в API создания хранилища ключей или хранилища доверенных сертификатов . Имя может содержать только буквенно-цифровые символы:

curl -X POST -H "Content-Type: text/xml" \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-d '<KeyStore name="myKeystore"/>' -u email:password

Пример ответа:

{
 "certs" : [ ],
 "keys" : [ ],
 "name" : "myKeystore"
}

После создания именованного хранилища ключей в среде вы можете загрузить файлы JAR, содержащие сертификат и закрытый ключ, с помощью API загрузки файла JAR в хранилище ключей :

curl -X POST -H "Content-Type: multipart/form-data" \
-F file="@myKeystore.jar" -F password={key_pass} \ "https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/{myKeystore}/keys?alias={key_alias}" \
-u email:password

где опция -F указывает путь к файлу JAR.

В этом вызове вы указываете два параметра запроса:

  • alias — идентифицирует сертификат и ключ в хранилище ключей. Когда вы создаете виртуальный хост, вы ссылаетесь на сертификат и ключ по его псевдониму.
  • password — пароль для закрытого ключа. Опустите этот параметр, если у закрытого ключа нет пароля.

Убедитесь, что ваше хранилище ключей загружено правильно:

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myKeystore \
-u email:password

Пример ответа:

{  
 "certs" : [ "myCertificate" ],
 "keys" : [ "myKey" ],
 "name" : "myKeystore"
}

Создать хранилище доверенных сертификатов

API-интерфейсы, которые вы используете для создания хранилища доверенных сертификатов, такие же, как и для создания хранилища ключей. Единственное отличие состоит в том, что вы передаете файл сертификата как файл PEM, а не как файл JAR.

Если сертификат является частью цепочки, вам необходимо либо загрузить все сертификаты в цепочке отдельно в хранилище доверенных сертификатов, либо создать один файл, содержащий все сертификаты. Включите новую строку между каждым сертификатом в файле. Окончательный сертификат обычно подписывается эмитентом сертификата. Например, в хранилище доверенных сертификатов вы загружаете сертификат клиента client_cert_1 и сертификат издателя сертификата клиента ca_cert .

Во время двусторонней аутентификации TLS аутентификация клиента завершается успешно, когда сервер отправляет client_cert_1 клиенту в рамках процесса установления связи TLS.

Альтернативно, у вас есть второй сертификат client_cert_2 , подписанный тем же сертификатом ca_cert . Однако вы не загружаете client_cert_2 в хранилище доверенных сертификатов. Хранилище доверенных сертификатов по-прежнему содержит client_cert_1 и ca_cert .

Когда сервер передает client_cert_2 в рамках подтверждения TLS, запрос выполняется успешно. Это связано с тем, что Edge позволяет пройти проверку TLS успешно, если client_cert_2 не существует в хранилище доверенных сертификатов, но был подписан сертификатом, существующим в хранилище доверенных сертификатов. Если вы удалите сертификат CA ca_cert из хранилища доверенных сертификатов, проверка TLS завершится неудачно.

Создайте пустое хранилище доверенных сертификатов в среде с помощью Create a Keystore или Truststore — того же API, который вы используете для создания хранилища ключей:

curl -X POST -H "Content-Type: text/xml" -d \
'<KeyStore name="myTruststore"/>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-u email:password

Загрузите сертификат в виде файла PEM в хранилище доверенных сертификатов с помощью API загрузки сертификата в хранилище доверенных сертификатов :

curl -X POST -H "Content-Type: multipart/form-data" -F file="@trust.pem" \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myTruststore/certs?alias=myTruststore \
-u email:password

где опция -F указывает путь к файлу PEM.

Удаление хранилища ключей или хранилища доверенных сертификатов

Вы можете удалить хранилище ключей или хранилище доверенных сертификатов с помощью API удаления хранилища ключей или хранилища доверенных сертификатов :

curl -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myKeystoreName \
-u email:password

Пример ответа:

{
 "certs" : [ ],
 "keys" : [ ],
 "name" : "myKeystoreName"
}

Если вы удалите хранилище ключей или хранилище доверенных сертификатов, которое используется виртуальным хостом или целевой конечной точкой/целевым сервером, все вызовы API через виртуальный хост или целевую конечную точку/сервер завершится ошибкой.