Apple iOS 앱 배포시 인증에 관한 개념(코드 사이닝, 프로비저닝 프로필)

Young Bin Lee·2022년 7월 3일
1

Swift 배포

목록 보기
2/2

곧 설명할 일련의 과정은 애플이 앱의 보안과 무결성을 보장하기 위해 떨어놓은 호들갑이다. 인증서 발급 부분은 SSL에서도 사용하는 Chain of Trust, 공개키 암호화 방식과 기본적으로 같다.

아래 내용들은 이제 우리가 감내해야 하는 과정이다.

Refs

인증서 발급

  1. Xcode는 인스톨시 WWDR 중간 인증서(Intermediatd cetificate, ICA)를 만든 뒤 Keychain에 저장한다.
    • 중간 인증서는 최고 인증 권한자인 Root CA(RCA)의 권한을 위임받아 사용자 인증서 생성을 돕는다. 애플의 경우 Root CA는 여기 명시되어 있다.
    • 자세한 내용은 Chain of Trust의 중간 인증서의 개념을 이해해야 한다.(레퍼)
  1. Certificate Signing Request (CSR)를 하며 프라이빗 키가 만들어지고 키는 Keychain에 저장된다.
    • Keychain Access Application을 통해 CSR을 만들 경우 private key 와 certSigningRequest**가 만들어진다.
    • private key는 안전한 곳에(키체인) 저장되고 certSigningRequest 파일은 후에 Cetificate 발급을 위해 애플 멤버센터에 업로드 한다.
    • ICA는 자신들의 프라이빗 키로 내 해시값을 암호화 해 인증서에 서명했을 것이고 ICA는 RCA의 서명을 갖고 있으므로 결국 내 인증서는 RCA가 인증한 인증서가 될 것이다.
    • SSL같은 경우 알아서 이 과정을 해주기 때문에 했지만 우리는 개발자된 사람으로서 수동으로 인증서를 받아와야 하는 임무가 주어진다.
  1. CSR을 확인한 애플 멤버센터는 신청한 개발자를 위한 Certificate를 발급하고 개발자는 이를 로컬환경에 다운로드 한다.

CSR(Certificate Signing Request)이란?

CSR은 Certificate Signing Request(인증서 서명 요청)이란 뜻으로, 인증서 발급을 위한 필요한 정보를 담고 있는 인증서 신청 형식 데이터입니다.

CSR에 포함되는 내용으로는 개인키 생성 단계에서 만들어진 개인키(Private Key)와 공개키(Public Key)의 키쌍 중에서 공개키가 포함되며, 인증서가 적용되는 도메인에 대한 정보 등이 포함 됩니다.

레퍼런스

코드 사이닝 아이디 발급

  1. Certificate를 더블클릭 해 Keychain에 저장하는 과정이 필요하다. Certificate와 원래 Keychain에 저장되어 있던 프라이빗 키가 짝 지어져 Code Signing Identity가 만들어진다.
    • Certificate는 인증서의 소유자 이름, 인증서 소유자의 공개 키 (비밀 키는 소유자가 가지고 있다), 인증서의 유효 기간, 고유한 UID, 인증서의 기타 모든 값들을 해시화한 값을 갖는다.
  1. 이 인증서를 통해 앞으로 Code Signing이 이루어진다.

Code Signing이란?

Code Signing은 앱의 제작자가 서명한 개발자임을 확인하고 서명 후 내용의 변경이 없음을 보장하는 일종의 품질보증확인서다.

레퍼런스

프로비저닝 프로필 발급

  1. 프로비저닝 프로필은 위에서 발급받은 인증서와 앱 아이디, Xcode에서 다운로드 한 디바이스 아이디를 이용해 만든다. Xcode는 앱을 서명(sign)하고 디바이스에 프로비저닝 프로필을 푸시한다.
    • 프로비저닝 프로필 역시 추가적인 보안을 위한 절차로 앱이 돌아가는 모든 디바이스에 반드시 하나씩 존재해야 한다.
    • 프로필 마다 용도와 허용 범위가 다르다. 자세한 내용은 아래 참조.
  1. iOS는 프로필이 올바른지 확인한다. 위에서 말한 인증서, UDID, App ID가 여기 해당될 것이다.

프로비저닝 프로필이란?

프로비저닝 프로필은 앱 제작에 관한 권한과 이용 기능을 표시한다. 4가지 종류가 있다.

  • Development Profile: 등록된 디바이스만 앱을 인스톨 할 수 있다. 허가받은 디바이스 아이디가 명시되어있으며 디버그 모드에서 실행된다.
  • App Store Profile: 판매를 위해 앱스토어에 앱을 등록할 수 있다.
  • In-house Distribution Profile: 엔터프라이즈 개발자 계정에서만 사용 가능하며 회 사 내 계정을 가진 아무나에게 배포가 가능하다.
  • Ad-hoc Profile: 정해진 대수만큼만 배포된다. 디바이스 아이디를 따로 명시하지 않는다.

레퍼런스

미세팁

앱스토어 코드사이닝

https://engineering.linecorp.com/wp-content/uploads/2019/04/01-9.png
앱스토어에서 설치한 앱은 위와 같이 Apple의 인증서로 Code sign되어 있다.

프로비저닝 프로파일의 내용

프로비저닝 프로파일은 .ipa 파일을 뜯으면 나온다. .ipa 파일의 압축을 풀면 Payload 디렉터리 안에 embedded.mobileprovision란 이름의 파일이 있는데 entitlement, expriation date, provisioned devices 등의 정보를 볼 수 있다.

Auto vs Manual

프로비저닝 프로필은 Xcode가 자동으로 만들어주는게 디폴트다. CI/CD를 쓰면서 혹은 팀간 공유 계정을 쓰고자 할 때 수동으로 넣어주는 경우가 있는 듯 하다.

How to CI/CD

CI/CD를 할 때 개인이 아닌 팀 단위에서 앱을 관리하고자 할 때 N명이 N개의 인증서와 프로필을 가지면 문제가 될 수 있다. 그렇다고 공통으로 관리되는 계정을 만들자니 인증서 문제로 로컬 빌드가 안되는 상황이 생길 수 있다. 이럴 때 CI/CD를 위해 독립적으로 관리되는 프로필이 필요한데 다행히 우리가 다 할 필요는 없고 Fastlane의 Match라는 서비스가 대신 해준다. (match)

profile
I can make your dream come true

0개의 댓글