从 2015 年 8 月 15 日开始,Apple 的 GSX 网络服务将升级到更安全的版本,每个请求都需要客户端 SSL 证书。我需要采取哪些步骤才能使用 WCF 框架和 C#.NET 连接到这个新一代 Web 服务?
Apple 的文档指出第一步是生成 CSR(证书签名请求),将其发送给 Apple,他们将返回证书以确保 future 连接的安全。
如何生成此 CSR?接下来我需要采取哪些步骤才能成功连接并获得有效响应?
上述和之前的“查找我的 iPhone”web 服务实现给我带来了相当大的麻烦,我希望这能帮助其他用户。
(注意,我想添加 apple-gsx 标签,但我没有所需的声誉)
最佳答案
为了成功调用网络服务,需要执行以下步骤:
- 确保你有 OpenSSL安装和工作
- 生成 key 对:
openssl genrsa -aes256 -out [NameOfPrivateKey].pem 2048
保留此私钥PRIVATE,不要与任何人分享! - 出现提示时,选择安全密码并妥善保管。
- 生成证书签名请求 (CSR):
openssl req -new -sha256 -key [NameOfPrivateKeyFromStep2].pem -out [NameOfTheSigningRequest].csr
当上述命令因“警告:无法打开配置文件:/usr/local/ssl/openssl.cnf”而失败时,运行命令set OPENSSL_CONF=c:\[您的 OPENSSL 目录的路径]\bin\openssl .cfg
在管理员命令提示符下) - 将 .csr(证书签名请求)发送给 Apple,将 .key 保密。 Apple 返回一个 .pem 证书文件
确保 .pem 和 .key 的 MD5 匹配。以下命令的输出应该是相同的:
openssl x509 -noout -modulus -in [CertificateReceivedFromApple].pem | openssl md5
openssl rsa -noout -modulus -in [NameOfPrivateKeyFromStep2].pem | openssl md5
将证书和 key 合并到一个 .p12 容器中 (More info here)
openssl pkcs12 -export -in [CertificateReceivedFromApple].pem -inkey [NameOfPrivateKeyFromStep2].pem -out [FilenameOfNewKeyContainer].p12
出现提示时,选择安全密码并妥善保管。
让 VisualStudio 生成一个代理类,基于您可以从 Apple 下载的 WSDL 文件,例如将其命名为
GsxWSEmeaAspService
使用下面的代码验证您自己的身份。
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; } }
确保您没有运行任何 HTTP 代理,例如 Fiddler,因为当代理处于事件状态时,请求会失败。在 SoapUI 中运行请求也是如此:需要关闭代理设置。
- 请随时评论问题,如果他们提供有值(value)的信息,我会改进答案。
(注意,抱歉,无法说服解析器正确格式化,欢迎任何帮助..)
关于web-services - 如何使用 WCF 连接 Apple 的 GSX NewGeneration Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31583062/