학사 나부랭이
iOS - Code Signing, Certification, Provisioning Profile 본문
애플 디바이스에 응용 프로그램이 동작하려고 할 때, 앱 스토어에 배포할 때, 인앱 결제를 할 때 인증을 받아야 하는데, 여기서 인증서를 요청해야 해요. 그러니까 실제 자신의 디바이스에 구동을 시키고 싶다면 꼭 해야 하는 절차예요. 애플만이 자신들이 만든 디바이스에 어떤 소프트웨어를 실행하게 할 수 있어요.「アップルだけが自分たちが作ったデバイスにあるソフトを実行させる事を許すのです。」 실제로 앱이 실행될 때마다 애플로부터 인증을 받았는지 요구해요.
우선 iOS에 자신이 만든 앱을 등록하는 과정은 대략적으로 아래와 같아요.
1. 개발자가 애플에게서 iOS 디바이스에 앱을 설치할 수 있는 권한을 얻어야 해요. 그러니까, 개발자는 애플에서 인증을 받은 개발자가 되어야 하는 허가제이죠. 이 인증서를 통해 애플은 개발자를 식별하고, 앱 서명에 대한 권한을 얻을 수 있어요.
2. 자신의 앱을 디바이스에 설치할 때, 디바이스에는 항상 만든 사람의 서명이 포함되어요. 서명에는 만든 사람의 권한 정보가 포함되고, 애플에서 인증받은 개발자만 앱을 디바이스에 설치할 수 있어요.
이제부터 전술한 과정에서 필요한 것들과 이를 어떻게 만드는가 알아보자고요.
1. Certificate Signing Request
일반 개발자는 애플 소속이 아니기에 애플에서 인증받은 개발자가 되어야 해요. 이를 위해 개발자는 애플로부터 인증서를 받아야 하는데, 이 인증서를 받기 위해 생성하고 제출해야 하는 파일이 CSR이에요. 이 파일은 맥의 KeyChainAccess라는 앱을 통해 만들 수 있어요.
CertificateSigningRequest.certSigningRequest 파일 생성 - 애플에 등록할 인증 요청 파일, 이름, 이메일, 공개키를 포함하며 개인키로 사인해요.
인증서의 개인키, 공개키 생성 - 인증서를 주고받고 이를 사용하는 과정에서 공개키 암호 방식을 사용해요. 그러니 인증서를 애플에게서 발급받은 후 끝나는게 아니라 개인키를 보관해야 하죠.
이 과정이 지나면 개발자는 애플에서 인증받은 개발자가 되었어요! 이제 이 인증받았다는 사실을 디바이스에게 전달하면 되는데 이를 위해 Provising Profile*이 필요해요.
*Profile: 그룹 정책 또는 윈도우의 레지스트리 편집기와 같아요. 이를 통해 설정 그룹을 신속하게 배포하고 일반적으로 사용할 수 없는 강력한 관리 기능에 접근할 수 있어요.
2. Provising Profile
소프트웨어를 실행시킬 디바이스가 개발자를 신뢰하느냐에 따라 앱 설치 여부를 결정할 수 있는데 이 과정을 위해 필요해요. 즉, 인증서와 연결해주는 역할을 담당해요. 이 프로파일은 asdf.mobileProvision 형태의 파일인데요, 여기에는 다음과 같은 것들이 들어가요.
App ID: 모든 iOS 앱은 앱 스토어에 등록하려면 BundleID 기반의 App ID가 필요해요. 그러니까 앱 스토어에서 사용되는 앱의 ID죠.
Certificate: 이전에 만든 인증서예요.
Device: 모든 iOS 디바이스는 고유의 Unique Device ID를 가지며 이 디바이스를 developer 사이트에 등록해야 테스트하려는 앱을 디바이스에 설치할 수 있어요.
이 모든 과정이 Code Signing이라고 해요. 이제 배포 과정은 먼저, Provisioning Profile이 빌드된 앱이 다른 디바이스에서 실행되지 않도록 해요. 즉, 앱스토어를 위해 빌드된 앱은 앱스토어 제출 외에는 어떤 용도로도 사용할 수 없죠. 그 후, 애플 측에서는, 이 앱이 개발자에 의해 서명되었고, Provisioning Profile을 가지고 있기에 애플에 인증된 개발자가 제출한 앱임을 확인해요. 마지막으로 애플 측에서 승인할 때, 애플에서 자신들의 서명을 다시 함으로 모든 iOS 디바이스에서 실행될 수 있도록 해주죠.
'自習 > iOS' 카테고리의 다른 글
iOS - How to Break the Sandbox (0) | 2021.06.03 |
---|---|
iOS - Multitasking (0) | 2021.06.03 |
iOS - Sandbox, Container Directory (0) | 2021.06.03 |