앱을 클릭하면 띡! 하고 실행되는 것이 아니라,
실행할 때마다 무결성 확인, 프로비저닝 프로파일을 확인하여 이 디바이스에서 실행이 가능한 환경인지 체크를 하게 된다.
앱스토어에 배포된 앱들은 애플에서 재서명을 하면서 최종 앱에는 프로비저닝 프로파일이 포함되지 않는다.
따라서 인증서나 프로비저닝 프로파일이 만료되거나 삭제되어도
이미 배포되어 있는 앱은 여전히 사용이 가능하다.
다만 만료된 것들로 새로운 버전을 업데이트를 할 수 없으므로, 갱신된 배포 프로비저닝 프로파일을 사용하여 배포해야 한다.
하지만 엔터프라이즈 앱의 경우에는 만료, 삭제가 모두 치명적이다.
배포 인증서나 배포 프로비저닝 프로파일 하나라도 만료 혹은 삭제가 된다면
업데이트는 물론, 이미 배포되어 있는 앱도 사용이 불가능해진다.
자세한 내용은 아래에서 다루겠다!
간략하게 앱 실행 절차를 정리하면 (실제로는 더 복잡합니다!)
1. 저번에 왔던 녀석이군. 패스! (OCSP 캐시가 존재할 경우 기존 값을 사용하여 인증서 검증 생략)
2. 이 앱... 진짜 원본 그대로야? (시스템의 코드 서명 검증 - 앱 바이너리 무결성 확인)
3. 이 앱... 믿을만한 사람이 만든 거야? (팀 식별자(Team ID) 검증을 통한 개발자 신원 확인)
4. 앱 정보를 줘봐. 유효한지 확인할게 (프로비저닝 프로파일 유효기간 및 기본 정보 확인)
5. 이 앱... 당신의 핸드폰에서 사용하도록 허가가 된 건가? (프로비저닝의 디바이스 목록에 포함된 디바이스인지 확인 - Ad-hoc, 개발용의 경우만)
6. 아 맞다, 앱 이름이 등록된 이름과 일치한가? (프로비저닝의 AppID와 앱 번들 ID 일치 여부 확인)
7. 혹시 인증서가 취소되지는 않았겠지? (Apple OCSP 서버에 연결하여 배포 인증서 취소 여부 확인)
8. 써! (ㄱㅅ!)
앱을 한 번 실행하는데 이런 엄청난 일들을 진행한다.
매번 수행하는 건 아니고, 앱 최초 실행이나 캐시된 값이 만료되었을 때 수행한다고 한다.
무결성 검사
무결성 검사는 코드 서명과 인증서를 검증하는 단계이다.
코드 서명 검증 : iOS는 앱 실행 시점에 시스템이 모든 동적 라이브러리에 대해 코드 서명 검증을 수행한다. (서명 이후 변조되지 않았는지 확인하는 과정)
인증서 검증 : 배포 인증서가 Apple OCSP 서버에 연결하여 검증된다. 인증서가 취소된 경우 앱이 실행되지 않는다.
앱을 실행하면 먼저 코드 서명 검증 진행한다.
그리고 애플의 OCSP 서버에 연결하여 배포 인증서가 최소되지 않았는지 확인한다.
이 때, 이 값은 3~7일 정도 캐싱되기 때문에 매번 전달하지 않고
캐시가 유효하면 해당 값을 사용하게 된다.
따라서 인증서가 변경되더라도 바로 반영되는 것이 아니라
캐시가 유효하다면, 새로운 인증서를 사용하지 않고 캐시된 값을 사용한다.
캐시가 만료된다면 다시 인증서의 유효성을 확인하게 된다.
무결성 확인이 실패하는 경우에 사용자는 인증서 정보가 갱신된 앱을 재설치해야 사용할 수 있다.
실행환경 확인
프로비저닝 프로파일의 내용을 통해 실행이 가능한 환경(사용하고 있는 디바이스가)인지 체크한다.
프로비저닝 프로파일에는 배포 인증서 외에도 AppID, 실행 가능한 디바이스 리스트가 포함되어 있다!
프로비저닝 프로파일이 유효한지 확인한 뒤,
실행된 앱의 프로비저닝에 포함된 AppID와 앱 번들 ID가 일치한지 확인한다.
그리고 실행된 디바이스가 실행 가능한 디바이스 리스트에 있는지도 체크를 한다.
이 때, 디바이스 체크는 Ad-hoc과 개발용만 한다. (엔터프라이즈와 앱스토어 배포 프로파일에는 디바이스 목록을 포함하지 않는다.)
이 모든게 이상이 없을 경우 드디어 앱이 동작하게 된다;;
(앱 최초 실행을 할 때 빈 화면이 오래 보이는 이유가 이것 때문인걸까...?)
인증서와 프로비저닝 프로파일 (엔터프라이즈 앱)
위에서 언급했듯이
둘 중 하나라도 만료되거나 삭제되면 앱은 더이상 설치 및 실행을 할 수 없게 된다.
따라서 만료일 체크를 잘 해야 한다. (인증서 : 3년, 프로비저닝 : 1년)
인증서 유효기간은 3년이지만
프로비저닝 유효기간이 1년이기 때문에, 1년에 한 번씩은 꼭 업데이트를 해야 한다.
일단 엔터프라이즈에 등록된 계정 하나당 배포 인증서를 최대 2개 만들 수 있다.
그 이유는 음...
우선 인증서 갱신 순서는 아래와 같다.
B(신규) 인증서 생성 > 프로비저닝의 인증서를 B로 설정 > 갱신된 프로비저닝을 반영한 앱 배포 > A(기존) 인증서 삭제
???
사용자가 앱을 업데이트를 해야 갱신된 프로비저닝(B 인증서가 포함된)을 사용할 수 있을 텐데
앱을 업데이트 하지 않고 계속 사용할 경우(A 인증서를 계속 사용하는)는 어떻게 되는 거지?
인증서가 삭제되었으니까 사용할 수 없는 게 맞지 않나?
장기 미사용자는 결국 앱을 사용할 수 없는 게 맞지 않나?
이런 의문을 가졌는데, 공식 문서를 찾아보니 맞는 말인 것 같다.
인증서 2개를 동시에 활성화 할 수 있는 이유는 이런 업데이트를 할 수 있도록 일종의 유예 기간을 제공하는 것이다.
음 그러니까...
A 인증서의 유효 기간 : 2024. 05. 01 ~ 2026. 05. 01
B 인승서의 유효 기간 : 2026. 04. 01 ~ 2029. 04. 01
새로운 인증서 B를 A가 만료되기 전인 1달 전에 발급한 뒤 프로비저닝을 업데이트하여 새로운 버전의 앱을 배포했을 때
A와 B가 겹치는 날짜인 2026. 04. 01 ~ 2026. 05. 01 사이에 업데이트를 할 수 있도록 유예기간을 주는 것이다.
즉, 인증서를 새로 발급하면 바로 삭제하는 것이 아니라, 만료되었을 때 삭제하는 것이고,
새로운 인증서를 빨리 만들 수록 그만큼 사용자가 업데이트를 할 수 있는 유예기간이 늘어나는 것이다!
(그런데 그 유예기간동안에도 업데이트를 하지 않은 사용자는 결국 앱을 다시 설치해야 한다.)
https://support.apple.com/ko-kr/guide/deployment/depce7cefc4d/web
상호 간에 독립된 두 개의 배포 인증서를 동시에 활성화할 수 있습니다. 두 번째 인증서는 첫 번째 인증서가 만료되기 전에 앱을 업데이트할 수 있도록 유예 기간을 제공합니다. 두 번째 배포 인증서를 요청할 때, 첫 번째 인증서를 취소하지 않도록 주의하십시오.
그래도 이해에 어려움이 있을 것 같아 그림을 첨부한다.

*잘못된 정보가 있을 경우 피드백 부탁드립니다 ( _ _ )
참고
https://medium.com/@bingkuo/a-beginners-guide-to-code-signing-in-ios-development-d3d5285f0960
https://support.apple.com/ko-kr/guide/security/sec7c917bf14/web
'iOS' 카테고리의 다른 글
| [iOS] Automatically manage signing (자동관리 이해하기) (1) | 2025.09.23 |
|---|---|
| [iOS] 인증서 생성하기 (1) | 2025.09.16 |
| [iOS] CSR(Certificate Signing Request) 생성하기 (0) | 2025.09.12 |
| [iOS] embedded.mobileprovision (1) | 2025.08.29 |
| [iOS] Intune SDK 적용하기 - 네이티브 (6) | 2025.08.08 |