APNS 포스팅 개요
1년만에 다시 푸쉬서비스를 만들려고 하니 기억도 안나고 검색해서 찾아보니 너무 옛날 데이터들이라 헷갈리기도 해서 “이참에 좀 자세하게 기록해놓자!!” 하는 마음에 포스팅을 했습니다. 총 3단계로 나누어 인증서 설치, 서버단에서 푸시 보내기, 앱단에서 푸시 처리하기로 해서 포스팅을 시작하고자 합니다.
APNS란 용어는 애플 개발자 레퍼런스에도 너무 자세하게 나와있고 검색해도 수도 없이 나오기때문에 생략하고 철저하게 개발 적용에만 촛점을 맞추도록 하겠습니다.
APNS 인증서 발급 조건
- 발급일 2013년 7월경
- Mac OS X 버전 10.8.4 (산사자)
- Xcode 버전 4.6.3
- iOS7이 베타3까지 출시
APNS 인증서 발급을 위한 개인 인증서 만들기
우선 애플(Apple) 사이트에서 Notification 인증서를 만들기 위해서는 아래와 같이 키체인을 이용해
CertificateSigningRequest.certSigningRequest 라는 인증서를 만들어야 합니다.
이 인증서는 Notification 인증서를 발급받을 때 반드시 필요하니 우선 따라서 만들어 봅시다.
키체인(Keychain)을 실행한 후 다음과 같이 따라 해보세요!




이렇게 작업을 완료하시고 Finder에서 보기를 눌러 보시면 다음과 같은 파일이 만들어집니다.
CertificateSigningRequest.certSigningRequest
APNS 인증서 발급받기
[box type=”warning”] 반드시 애플 개발자 계정을 가지고 계셔야 접근하실 수 있습니다. 일반 애플 계정과는 다르니 안되시는 분은 개발자 등록부터 해주시기 바랍니다.[/box]
이제 개인 인증서를 만들었으니 애플 개발자 사이트로 이동합니다.
개발자 사이트에 접속하시면 상단에 Member Center라는 곳이 있습니다.
접속하시면 바로 아래의 이미지와 같은 화면을 보실 수 있습니다. 그림을 보시면서 순서대로 따라하시면 금방 APNS용 인증서를 발급받을 수 있습니다.
그럼, 멤버센터에서 Certificates, Identifiers & Profiles > Identifiers > APP ID’s 메뉴로 이동하세요!









이렇게 해서 인증서 발급을 과정을 마쳤습니다. 생각보다 어렵지 않습니다.
자 그럼, 이제부터가 중요한데요! 서버에 직접 설치할 인증서를 만들어 보겠습니다.
APNS 서버인증서 만들기
서버인증서를 만드는 작업을 하기전에 우선 키체인을 열어 방금 설치한 Apple Development(or Production) iOS Push Services: kr.co.godo.godo 인증서를 찾아서 Export(내보내기)를 해서 .p12 파일로 만들어줘야 합니다.
다음의 그림을 보면서 따라하시면 되겠습니다. 그림과 같이 인증서 옆에 화살표 아이콘이 있고 그걸 누르면 개인키가 나타나오니 참고하시면서 작업하시기 바랍니다.







이작업을 하시면 바탕화면(여러분이 지정한 경로)에 cert.p12와 key.p12 파일들이 만들어집니다.
이제부터 중요합니다. 인증서 형식을 변환하기 위한 작업으로 Terminal에서 작업을 할 것 입니다.
딱 4가지 명령만 실행하시면 됩니다. ———- 이걸로 표시된 부분은 결과값을 보여주려고 나타낸 것이니 터미널에서는 입력하지 말아주세요!
|
1
2
3
4
5
6
|
openssl pkcs12 –clcerts –nokeys –out cert.pem –in cert.p12
—————————————————————————————
Enter Import Password:
Mac verified OK
—————————————————————————————
|
다음과 같이 입력하고 엔터를 치면 비밀번호를 물어봅니다.
이 비밀번호는 아까 cert.p12 만들때 작성하신 패스워드를 넣어주시면 됩니다.
이렇게 하고 나면 해당 경로에 cert.pem 이라는 파일이 생깁니다.
|
1
2
3
4
5
6
7
8
|
openssl pkcs12 –nocerts –out key.pem –in key.p12
————————————————————————–
Enter Import Password:
Mac verified OK
Enter PEM pass phrase:
Verifying = Enter PEM pass parase:
————————————————————————–
|
위 코드는 key.p12를 key.pem으로 만들어주는 작업입니다.
바로 윗부분에 cert.pem 만드는 작업과 동일하지만 마지막에 패스워드를 생성하는 작업을 해주셔야 합니다.
|
1
2
3
4
5
6
|
openssl rsa –in key.pem –out key.unencrypted.pem
————————————————————————
Enter pass phrase for key.pem:
writing RSA key
————————————————————————
|
위에서 만들어진 key.pem을 가지고 key.unencrypted.pem을 만드는 코드입니다.
하단의 출력결과에도 써있다 시피 윗단계에서 새로 생성한 패스워드를 입력하시면 됩니다.
이제 마지막 하나가 남았습니다.
|
1
|
cat cert.pem key.unencrypted.pem > apns.pem
|
마지막부분에 apns.pem이라고 적어놓은 부분은 여러분이 만들고 싶은 이름으로 변경해서 작성해주시면 됩니다.
이렇게 마무리 하시면 작업하신 해당 경로에 아래리스트와 같이 6개의 파일들이 생성되어 있을 것이니 꼭 확인해주시기 바랍니다.
- cert.p12
- key.p12
- cert.pem
- key.pem
- key.unencrypted.pem
- apns.pem
윗 단계를 하나의 이미지로 보면 다음과 같습니다.

이제 모든 것이 끝났습니다. 결국 apns.pem 이 파일 하나 만들고자 이짓을 했던 것 입니다.
푸시서버로 구성할 곳으로 apns.pem 파일을 업로드 해주시면 됩니다.
위치는 아무곳에나 하셔도 상관없지만 경로만 알면 다운로드가 가능한 웹루트는 피하시기 바랍니다.
이렇게 만들어진 인증서를 이용해 SSL Connect의 연결을 유지한 상태에서 Push메시지를 발송하면 됩니다.
개발에 관련된 부분은 다음 스텝에서 안내해드리겠습니다.
15 Responses
[…] 시리즈인 프로바이더에서 개발 방법에 대해서 알아보겠습니다. 이미 인증서 만들기에서 제작한 apns.pem 인증서 파일을 FTP 프로그램을 이용해 임의의 경로로 […]
Thank you very much for your blog.
I enjoyed reading this article.
작성하신글이 정말 많은 도움이 되었습니다.
그런데 따라하던 도중에 질문이 하나있는데요….
개발용은 type이 APNs Development iOS로 제대로 나오는데
배포용은 개발용과 똑같이 하였는데 type이 APNs Production iOS이 아니라
Apple Push Services로 나오는 이유를 잘 모르겠습니다… 요즘 타입이 변경된건지
아니면 어떤거 때문에 그러는지 알 수 있을까요??
타입이 변경되었습니다. 다른거 없으며 동일합니다.
[…] APNS 따라하기 시리즈 (인증서 만들기) […]
[…] http://qnibus.com/blog/how-to-make-certification-for-apns/ […]
좋은 글 잘 보았습니다. 그런데 인증서에 비밀번호까지 해제된 개인키는 왜 append하는 건지 설명해 주실 수 있을까요??
[…] 불가하다. 15. APNS Push 인증서 1) Php 인증서 생성 – Link 2) Jsp 인증서 생성 – Link 3) Node.js 인증서 생성 – Link 16. Java Apns Provider(발신)용 Pem 파일 생성 명령 – […]
정말 큰 도움이 되었습니다.
감사의 말을 남기고자 한자 적고 갑니다.
그럼 즐거운 하루보내세요!
정말 도움이 많이 되었습니다.
질문하나만 드릴려구요…
developer용은 잘 만들었는데요.
distribution 은 개인키가 없더라구요…
혹시 배포용 개인키는 따로 생성해야 하나요?
답변 부탁드리겠습니다.
production을 말씀하시는 것인가요?
그렇다면 distribution하고는 상관없습니다.
distribution은 작명하신 회사이름으로 키가 나올겁니다.
인증서는 정말 할때마다 헷갈려서 잘 모르시면 댓글 주세요!
정확하게 확인해보고 알려드리죠!
인증서를 다시 만들 일이 있어서 들렀습니다.
전에 해본적 있기는 있지만, 역시 만들때마다 드는 생각인데 너무 복잡하군요ㅠ
나중에 간단하게 스크립트라도 하나 짜든가 해야겠어요
만들때마다 헷갈리는건 저도 마찬가지입니다. 그래서 정리해놨는데~
또 한편으로는 정리를 해놓으니 보지 않으면 모르겠네요! ㅎㅎ
좋은글 잘 읽었습니다. 질문이 있습니다..
하나의 아이디로 여러개의 앱을 구성해서 앱별로 푸쉬 서비스를 이용하는 경우
1. 서버인증서는 앱별로 각각 받아야 하나요?
2. 각각 받아야 한다면 개인인증서는 한개로 계속 사용 하면 되나요?
답변 가능하시면 부탁 드리겠습니다.
답변이 너무 늦었네요 ㅡ.ㅡ
1. 앱발급받을 때 푸쉬인증서를 앱별로 연동하기 때문에 당연히 푸시를 발송할때도 앱별로 인증서를 만들어서 발송해야 합니다.
2. 개인인증서는 당연히 동일 애플 개발자 계정내에 속해 있는 앱이라면 한개로 계속 사용 가능합니다.