Код, который я использую, является примером кода SFS для Unity, то есть просто доказательством концепции. Сервер SFS 2.13.0.
Вот то, что я сделал.
- Включено шифрование в конфигурации зоны ( true ).
- Изначально использовался сертификат Let's Encrypt, а затем сертификат Certum.
- Сертификаты импортируются в хранилище ключей JKS и помещаются в lib / jetty / etc. lib / jetty / start.d / ssl.ini обновляется соответствующим образом и сервер перезапускается.
После запуска SFS я могу подключиться с помощью инструмента командной строки openssl и посмотреть сертификат.
Из Unity я пытаюсь войти в систему с помощью примера клиента (Connector.cs). Если я отключаю шифрование, оно работает просто отлично. В момент, когда я добавляю слушателя, происходит сбой.
Сначала есть прослушиватель событий:
if (useEncryption) {
sfs.AddEventListener (SFSEvent.CRYPTO_INIT, OnCryptoInit);
}
Затем событие запускается из OnConnection:
if (useEncryption) {
trace("Initializing Crypto");
StartCoroutine(sfs.InitCrypto ());
} else {
enableInterface ("LOGIN");
uiState = 2;
}
Метод OnCryptoInit выглядит следующим образом:
private void OnCryptoInit(BaseEvent evt) {
trace("Crypto Initialized?");
if ((bool) evt.Params["success"]) {
trace("....YES!");
enableInterface ("LOGIN");
uiState = 2;
} else {
trace("Encryption initialization failed: " + (string)evt.Params["errorMessage"]);
}
}
Когда я запускаю это, я всегда получаю (независимо от сертификата):
Encryption initialization failed: Unknown Error
Что не очень полезно.
Дамп Wireshark показал мне Привет Клиента, Привет Сервера и Сбой рукопожатия. Я включаю только один шифр на стороне Smartfox (TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256), но я вижу его в списке шифров (85 из них), которые отправляет клиент, поэтому я не думаю, что это из-за невозможности согласовать приемлемый шифр.
Моя первоначальная попытка была с сертификатом Let's Encrypt на стороне Smartfox. Позже я приобрел его у Certum (эмитентом является Certum Domain Validation CA SHA2). Я не могу проверить, есть ли в моей установке Unity промежуточные продукты, необходимые для проверки этих сертификатов.
Как выяснить причину сбоя SSL?
Ожидает ли Unity все промежуточные сертификаты в своем собственном хранилище сертификатов?
В любом случае, где находится хранилище сертификатов Unity? Как проверить наличие всех корневых сертификатов или нет?
Какие-либо предложения о том, как я могу отладить эту проблему далее?