Establishing a Certificate-Based Connection to APNs

Panther·2021년 8월 17일
0

https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns

"Secure your communications with Apple Push Notification service (APNs) by installing a certificate on your provider server."

제공자 서버에 인증서 설치를 통해 애플 푸시 노티피케이션 서비스(APNs)와 커뮤니케이션을 보안상 안전하게 합니다.

Overview

인증서 기반 인증을 사용하면 제공자 서버와 APNs 사이의 보안 연결을 만들기 위해 제공자 인증서를 사용하게 됩니다. 개발자 계정을 통해 애플로부터 이 인증서를 가져올 수 있습니다.

신뢰는 서버 수준에서 만들어지기 때문에 개별 노티피케이션 요청은 페이로드와 기기 토큰만 포함합니다. 인증 토큰을 포함하지 않으며, 각 노티피케이션 요청의 크기를 조금이나마 감소시킵니다.

앱, 애플 워치 컴플리케이션에 노티피케이션을 보내기 위한 제공자 인증서를 사용할 수 있습니다. 앱과 관련이 있는 백그라운드 VoIP 서비스 역시 노티피케이션을 보내기 위한 제공자 인증서를 사용할 수 있습니다. 여러 앱에 원격 노티피케이션을 보내려면 각 앱마다 별도의 인증서를 생성해야 합니다. 각 앱의 노티피케이션에 대한 개별 APNs 연결을 관리할 수도 있습니다. 결과적으로 여러 앱을 지원하기에는 토큰 기반 인증을 사용하는 것이 더 간단합니다.

Obtain a Provider Certificate from Apple

developer.apple.com에서 개발자 계정으로부터 제공자 인증서를 가져올 수 있습니다. 인증서 섹션에서 아래와 같이 진행합니다.

  1. 새 인증서를 추가합니다.
  2. 타입에서 애플 푸시 노티피케이션 서비스 SSL(Sandbox & Production)을 선택하고 계속하기를 클릭합니다.
  3. 앱의 애플 아이디(번들 ID라고도 하는)를 선택하고 계속하기를 클릭합니다.
  4. 자신의 서버에 인증 서명 요청(CSR)을 생성합니다.
  5. 계속하기를 클릭합니다.
  6. CSR 파일을 업로드하고 계속하기를 클릭합니다.
  7. 결과로 나타난 인증서를 다운로드합니다.

Important
인증서는 특정 앱에 연결되어야 합니다.

Figure 1 Obtaining a remote notification certificate

개별 인증서를 인증서 생성시 구체화했던 앱 ID를 갖는 각각의 앱에 연결시켜야 합니다. 인증서를 인증서 암호화를 위해 사용되는 private 키인 CSR과 연결시켜야 합니다. 인증서는 그 자체로 APNs와 교환하는 공용 키가 됩니다. 인증서 생성에 대한 내용은 Certificates overview를 보시기 바랍니다.

Certificates overview
https://help.apple.com/developer-account/#/deveedc0daa0

Install the Certificate and Private Key

제공자 서버에 인증서와 private 키를 설치해야 합니다. macOS에서 인증서를 더블 클릭하면 키체인 접근에 자동으로 설치됩니다. 제공자 서버로부터 CSR을 생성한 경우 키체인 접근은 키체인에 자동으로 키를 설치합니다.

VoIP 서비스 인증서를 선택해서 생성된 인증서는 PushKit VoIP 노티피케이션을 보낼 수 있도록 해줍니다. WatchKit 서비스 인증서는 PushKit VoIP와 watchOS complication을 위한 노티피케이션 모두를 허용할 것입니다. 커맨드 라인 툴 openssl을 명령 옵션 x509와 함께 사용해서 인증서를 검사하시기 바랍니다.

인증서 검사를 위해서 키체인 접근 앱을 사용할 수도 있습니다. 키체인 접근에서 Details > Subject Name > Common Name 아래에 Topic/Bundle ID를 찾을 수 있습니다. PushKit VoIP 및 watchOS complication에 대해 추가적인 Topics/Bundle IDs에서 Details > Public Key Info 아래에 Extension 1.2.840.113635.100.6.3.4와 1.2.840.113635.100.6.3.6를 확인할 수 있습니다.

Important
키체인 접근을 사용해 인증서의 만료를 확인하시기 바랍니다. 사용자에게 서비스에 대한 방해를 피할 수 있도록 만료되기 전에 제공자 인증서를 갱신해야 합니다. 제공자 인증서는 1년 동안 유효하고, APNs와 계속 커뮤니케이션하려면 업데이트되어야 합니다.

Establish Trust with APNs

설치된 인증서와 함께 Figure 2는 APNs 서버에 연결을 열 때 발생하는 단계의 연속을 보여줍니다. TLS를 사용해서 보안 연결을 요청한 후 APNs는 유효성 검증을 위해 제공자서버에게 인증서를 보내는 것으로 응답합니다. 해당 인증서를 검사한 후 APNs에 제공자 인증서를 다시 보낼 수 있고, APNs는 유효성을 검사하고 보안 연결을 완료합니다. 이후 APNs에 원격 노티피케이션 전송을 시작할 수 있습니다.

Figure 2 Establishing trust with APNs

인증서 혹은 private가 손상되었다고 판단되면, 개발자 계정으로부터 인증서를 취소할 수 있습니다. APNs는 취소된 인증서의 리스트를 유지하며, APNs는 해당 리스트에 있는 인증서를 갖는 서버로부터의 TLS 연결을 거부합니다. 서버가 취소된 인증서를 사용하고 있다면, APNs에 대한 기존 연결을 모두 닫고 새 연결을 열기 전에 서버에 대한 새 제공자 인증서를 설정해야 합니다.

See Also


Security

Establishing a Token-Based Connection to APNs

stateless 인증 토큰을 사용해서 애플 푸시 노티피케이션 서비스(APNs)와 커뮤니케이션을 보안상 안전하게 합니다.

https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns
https://velog.io/@panther222128/Establishing-a-Token-Based-Connection-to-APNs


0개의 댓글