Как я могу подключиться к веб-сервисам Apple GSX NewGeneration с помощью WCF?

Начиная с 15 августа 2015 года веб-сервисы GSX от Apple будут обновлены до более безопасной версии, требующей SSL-сертификата на стороне клиента для каждого запроса. Какие шаги мне нужно предпринять, чтобы подключиться к этому веб-сервису нового поколения с помощью платформы WCF с C#.NET?

В документации Apple говорится, что первым шагом является создание CSR (запрос на подпись сертификата), отправка его в Apple, и они вернут сертификат для защиты будущих соединений.

Как я могу сгенерировать этот CSR? Какие шаги мне нужно предпринять, чтобы успешно подключиться и получить действительный ответ?

Вышеупомянутое и предыдущая реализация веб-службы «Найти iPhone» доставили мне относительно много проблем, я надеюсь, что это поможет другим пользователям.

(Примечание: я хотел бы добавить тег apple-gsx, но у меня нет необходимой репутации)


person MeanGreen    schedule 23.07.2015    source источник


Ответы (1)


Для успешного вызова веб-сервиса необходимо выполнить следующие шаги:

  1. Убедитесь, что у вас установлен и работает OpenSSL.
  2. Создайте пару ключей:
    openssl genrsa -aes256 -out [NameOfPrivateKey].pem 2048
    Храните этот закрытый ключ ЧАСТНЫМ, никому его не сообщайте!
  3. При появлении запроса выберите безопасный пароль и сохраните его.
  4. Создайте запрос на подпись сертификата (CSR):
    openssl req -new -sha256 -key [NameOfPrivateKeyFromStep2].pem -out [NameOfTheSigningRequest].csr
    Если приведенная выше команда завершается сбоем с сообщением «ПРЕДУПРЕЖДЕНИЕ: невозможно открыть файл конфигурации: /usr/local/ssl/openssl.cnf», выполните команду set OPENSSL_CONF=c:\[PATH TO YOUR OPENSSL DIRECTORY]\bin\openssl.cfg под учетной записью администратора. командная строка)
  5. Отправьте .csr (запрос на подпись сертификата) в Apple, оставьте ключ .key закрытым. Apple возвращает файл сертификата .pem
  6. Убедитесь, что MD5 .pem и .key совпадают. Вывод следующих команд должен быть идентичным:

    openssl x509 -noout -modulus -in [CertificateReceivedFromApple].pem | openssl md5

    openssl rsa -noout -modulus -in [NameOfPrivateKeyFromStep2].pem | openssl md5

  7. Объедините сертификат и ключ в один контейнер .p12 (Подробнее здесь )

    openssl pkcs12 -export -in [CertificateReceivedFromApple].pem -inkey [NameOfPrivateKeyFromStep2].pem -out [FilenameOfNewKeyContainer].p12

  8. При появлении запроса выберите безопасный пароль и сохраните его.

  9. Позвольте VisualStudio сгенерировать прокси-класс на основе файла WSDL, который вы можете загрузить из Apple, например, назовите его GsxWSEmeaAspService

  10. Используя приведенный ниже код, авторизуйтесь. userSessionId необходим для дальнейших вызовов для фактической отправки или получения данных.

    public void Authenticate() {
        using (GsxWSEmeaAspService client = new GsxWSEmeaAspService()) {
            X509Certificate2 cert = new X509Certificate2(
                [PathToContainerFromStep7].p12"),
                [YourPasswordFromStep8],
                X509KeyStorageFlags.MachineKeySet);
            client.ClientCertificates.Add(cert);
    
            GsxWSEmeaAspService.authenticateRequestType req = new GsxWSEmeaAspService.authenticateRequestType();
            req.languageCode = "EN";
            req.serviceAccountNo = [YourAppleServiceAccountNumber];
            req.userId = [YourUserID];
            req.userTimeZone = "CEST";
    
            client.Proxy = null;
    
            GsxWSEmeaAspService.authenticateResponseType res = client.Authenticate(req);
            userSessionId = res.userSessionId;
        }
    }
    
  11. Убедитесь, что вы не используете какие-либо http-прокси, такие как Fiddler, потому что запрос не будет выполнен, если он активен. Это также верно для выполнения запросов в SoapUI: настройка прокси должна быть отключена.

  12. Не стесняйтесь комментировать вопросы, я улучшу ответ, если они добавят ценную информацию.

(Примечание. Извините, не удалось убедить синтаксический анализатор правильно отформатировать это, любая помощь приветствуется..)

person MeanGreen    schedule 23.07.2015
comment
OpenSSL на первом шаге — неработающая ссылка - person Marco Lackovic; 18.01.2016