Вы просматриваете документацию 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:
- Войдите в пользовательский интерфейс управления Edge по адресу https://enterprise.apigee.com (облако) или
http://<ms-ip>:9000
(локально), где<ms-ip>
— это IP-адрес управления. Серверный узел. - В меню пользовательского интерфейса управления 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="GoDaddy.com, Inc.", 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:
- Войдите в пользовательский интерфейс управления Edge по адресу https://enterprise.apigee.com (облако) или
http://<ms-ip>:9000
(локально), где<ms-ip>
— это IP-адрес управления. Серверный узел. - В меню пользовательского интерфейса управления Edge выберите «Администратор» > «Сертификаты TLS» .
В пользовательском интерфейсе Edge вы можете указать, насколько заранее Edge укажет, что срок действия сертификата истекает. По умолчанию пользовательский интерфейс выделяет все сертификаты, срок действия которых истекает в ближайшие 10 дней.
Создать хранилище ключей
Хранилище ключей зависит от среды вашей организации, например тестовой или рабочей среды. Поэтому, если вы хотите протестировать хранилище ключей в тестовой среде перед его развертыванием в производственной среде, вам необходимо создать его в обеих средах.
Создание хранилища ключей представляет собой двухэтапный процесс:
- Создайте файл JAR, содержащий ваш сертификат и закрытый ключ.
- Создайте хранилище ключей и загрузите файл 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 через виртуальный хост или целевую конечную точку/сервер завершится ошибкой.