从2015年8月15日开始,Apple的GSX网络服务将升级为更安全的版本,每个请求都需要客户端SSL证书。使用带有C#.NET的WCF框架,我需要采取哪些步骤来连接到此新一代Web服务?
Apple的文档说明第一步是生成CSR(证书签名请求),将其发送给Apple,他们将返回证书以确保未来的连接。
如何生成此CSR?成功连接并获得有效响应后,我需要采取哪些步骤?
上面和之前的Find My iPhone webservice实现给我带来了相对大的麻烦,我希望这能帮助其他用户。
(N.B。我想添加apple-gsx标签,但我没有所需的声誉)
答案 0 :(得分:3)
为了成功调用Web服务,需要执行以下步骤:
openssl genrsa -aes256 -out [NameOfPrivateKey].pem 2048
openssl req -new -sha256 -key [NameOfPrivateKeyFromStep2].pem -out [NameOfTheSigningRequest].csr
set OPENSSL_CONF=c:\[PATH TO YOUR OPENSSL DIRECTORY]\bin\openssl.cfg
)确保.pem和.key的MD5匹配。以下命令的输出应相同:
openssl x509 -noout -modulus -in [CertificateReceivedFromApple].pem | openssl md5
openssl rsa -noout -modulus -in [NameOfPrivateKeyFromStep2].pem | openssl md5
将证书和密钥合并到一个.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中运行请求也是如此:代理设置需要关闭。
(N.B。抱歉,无法说服解析器正确格式化,欢迎任何帮助..)