Статьи

Двухсторонний SSL в приложении Mule

Вступление

В  моей предыдущей статье я объяснил, как работает двусторонний SSL в контексте приложения Mule. Многие люди спрашивают, как настроить HTTPS-запрос в приложении Mule. В этой статье приводятся сведения о том, как вызывать службы HTTPS, для которых требуется двусторонняя SSL-аутентификация или взаимная аутентификация. Прежде чем мы углубимся в подробные процедуры, давайте рассмотрим, как работает двусторонняя SLL между клиентами и серверами.

Двусторонняя SSL-аутентификация

Суть Two-Way SSL заключается в обмене сертификатами между клиентами и серверами. Детали довольно сложны и выходят за рамки этой статьи. Вот схема высокого уровня обмена сертификатами:

  1. Клиент отправляет сообщение ClientHello на сервер.
  2. Сервер отвечает ServerHello, сертификатом сервера и запросом сертификата клиента.
  3. Клиент отправляет свой сертификат и другую информацию, такую ​​как схема шифрования, проверка сертификата сервера и т. Д.
  4. Сервер отвечает по схеме шифрования.
  5. Начните обмениваться информацией.

Теперь, как нам настроить приложение Mule в качестве клиента?

Генерация сертификата клиента

Как правило, ИТ-администратор генерирует клиентские сертификаты аналогично, как я описал в  моем блоге здесь . Давайте предположим, что сейчас так, чтобы мы могли описать, как настроить Mule HTTPS Request. Прежде чем продолжить, нам нужно заранее получить сертификат сервера. Сертификат может иметь различные формы, такие как JKS, PKCS12, PEM и т. Д. Запрос Mule HTTPS поддерживает три формы:

  • JKS
  • PKCS12
  • JCEKS

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

  • если это предварительное развертывание, лучший способ — импортировать сертификат в серверы JVM.
  • если он развернут в MuleSoft CloudHub, нам нужно преобразовать PEM в PKCS12.

Если это предварительное развертывание, мы можем импортировать сертификат PEM непосредственно в каскады. (Убедитесь, что у вас есть разрешение sudo, и сертификат сервера называется SERVER_CERT.pem .) Вот процедура:

cd ${JAVA_HOME}/jre/lib/security 
cp SERVER_CERT.pem 
sudo keytool -import -alias mule1-cyberark -keystore cacerts -file SERVER_CERT.pem

Чтобы убедиться, что сертификат сервера находится в формате pem, вы можете использовать следующую команду:

openssl x509 -in SERVER_CERT.pem -text

Если это развертывание CloudHub, нам нужно преобразовать файл pem в формат PKCS12. Вот команда:

openssl pkcs12 -export -nokeys -in SERVER_CERT.pem -out SERVER_CERT.pfx

Обратите внимание на параметр -nokeys . Это означает, что у вас нет закрытого ключа сертификата. Теперь, когда у нас есть сертификаты сервера, нам нужно преобразовать сертификат клиента в PKCS12. Вот команда:

openssl pkcs12 -export -in cacert.pem -inkey cakey.pem -out identity.p12 -name "mykey"

Обратите внимание, что вышеупомянутая процедура попросит пароль. Убедитесь, что вы помните это.

Настройка Mule Flow

Следующая диаграмма показывает простой поток Мула

Мул поток

Конфигурация запроса HTTPS:

<http:request-config name="HTTPS_Request_configuration" doc:name="HTTP Request configuration" doc:id="489bd416-2a79-4817-9968-627aaa6ee553">  
	<http:request-connection protocol="HTTPS" host="two-way-ssl.server.com" port="443">   
    	<tls:context>    
        	<tls:key-store type="pkcs12" path="identity.p12" keypassword="gary" password="gary">   
       	</tls:key-store></tls:context>  
    </http:request-connection> 
</http:request-config>

Суть в том, что сертификат клиента

<tls:key-store type="pkcs12" path="identity.p12" keypassword="gary" password="gary"> 
</tls:key-store>

и сертификаты сервера это:

<tls:trust-store type="pkcs12" path="SERVER_CERT.p12" keypassword="gary" password="gary"> 
</tls:trust-store>