Как настроить Gatling на использование клиентских сертификатов для каждого виртуального пользователя?

#ssl #gatling #scala-gatling

#ssl #gatling #scala-gatling

Вопрос:

Как настроить Gatling на использование клиентских сертификатов для каждого виртуального пользователя?

Я готовлю симуляцию Gatling для API, который защищен клиентскими сертификатами, и в настоящее время мне удалось установить только один клиентский сертификат для всех симуляций в конфигурации Gatling

 ssl {
  keyStore {
    #type = ""
    file = "C:/client_certificates/00001.pfx"
    password = "password"
    #algorithm = ""
  }
}
 

Однако я хотел бы иметь разные клиентские сертификаты для разных виртуальных пользователей (клиентские сертификаты можно выбирать случайным образом из списка доступных клиентских сертификатов или по кругу). В документации Galing упоминаются keymanagerfactory и perUserKeyManagerFactory function, но без явных примеров их использования.

Комментарии:

1. Попробуйте perUserKeyManagerFactory(userId => io.gatling.commons.util.Ssl.newTrustManagerFactory(None, f"C:/client_certificates/$userIdd.pfx", "password", None))

2. @George Leung, newKeyManagerFactory следует использовать вместо newTrustManagerFactory . В противном случае ваше решение работает! Не могли бы вы опубликовать ответ? Я приму это

Ответ №1:

Ссылки на ключи конфигурации, приведенные в вопросе io.gatling.core.ConfigKeys.ssl.keyStore . Значения считываются и передаются Ssl.newKeyManagerFactory для создания KeyManagerFactory .


perUserKeyManagerFactory принимает функцию Long => KeyManagerFactory , которая создает KeyManagerFactory идентификатор виртуального пользователя.


Зная, что мы можем написать следующее:

 import io.gatling.commons.util.Ssl

...
.perUserKeyManagerFactory { userId =>
  val fileName = f"C:/client_certificates/$userIdd.pfx"
  Ssl.newKeyManagerFactory(None, fileName, "password", None)
}
 

С f помощью интерполятора мы можем легко userId дополнить нулями, чтобы получить 5 цифр.

Чтобы выбирать файлы по кругу, мы можем написать ${userId % totalNumber} вместо $userId .