Вопрос:
При запуске кода
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert ECert.pem -key EKey.pem
Я получаю ошибку
5155:error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown:/SourceCache/OpenSSL098/OpenSSL098-44/src/ssl/s3_pkt.c:1102:SSL alert number 46 5155:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-44/src/ssl/s23_lib.c:182:
Я попытался начать и получить сертификат, и я попытался снова получить секретный ключ, но если кто-нибудь может дать мне совет, как исправить это, было бы здорово.
Ответ №1
Alert 46 is certificate_unknown (из RFC 5246, раздел 7.2). Это значит:
Некоторая другая (неуказанная) проблема возникла при обработке сертификата, что делает его неприемлемым.
Учетные данные/сертификат клиента, которые вы предоставляете, отклоняются Apple.
Также см. ” Проверка взаимной аутентификации SSL” на странице “Обмен файлами безопасности”.
как исправить это было бы здорово.
Похоже, вы создали свои собственные учетные данные. Вы должны предоставить учетные данные, принятые Apple.
Я думаю, что одна из целей программ разработчика Apple – предоставить вам приемлемую идентификацию (другие включают повторяющиеся потоки доходов). В рамках программы разработчика Apple проверит запрос на подпись и выдаст вам сертификат на эти вещи.
В случае, если вам интересно, я не думаю, что вы можете избежать программы разработчика Apple в этом случае. (И для чего он стоит, я вообще не согласен с требованием программы разработчика и поручаю мне 200 долларов в год для использования своих устройств iOS и MacBook).
Ответ №2
Вы можете добавить -verbose.
В первую очередь это говорит о том, что корневой ЦС, который подписал ЦС, который подписал ЦС, который подписал gateway.sandbox.push.apple.com, не входит в пакет openSSL по умолчанию.
В приведенном выше случае это сертификат для:
i:/O=Entrust.net/OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Certification Authority (2048)
Который вы можете получить из и можете добавить к команде выше -CAfile *.
Как только вы это сделаете, вы должны иметь возможность установить правильное соединение и получить хотя бы ОК на сертификате сервера:
Verify return code: 0 (ok)
Dw.
*: вы можете также обмануть – просто добавьте -showcert; который дает вам сертификат сервера; вырезать и вставить это в server-cert.pem и добавить ‘-CAfile server-cert.pem’, а openssl не будет проверять его дальше по дереву.