부록 A.인증서

Edit

A.1OpenSSL 기반 자체 서명 인증서 생성하기

인증서 생성은 리눅스 운영체제에서 테스트했습니다.

대부분의 리눅스 배포판에는 OpenSSL 패키지가 설치되어 있습니다.

A.1.1OpenSSL 버전 확인

두 개의 명령어 중 하나를 선택해서 버전을 확인할 수 있습니다.

$ rpm -qa openssl 
$ openssl version

A.1.2개인키 생성

명령어 입력 후, 패스워드를 설정하면 개인키가 생성됩니다.

$ openssl genrsa -des3 -out xpush.key 2048

명령어를 입력하면 아래와 같이 패스워드를 묻습니다.

$ keytool -importkeystore -destkeystore APNs-Certificates.jks
                           -srckeystore APNs-Certificates.p12 -srcstoretype PKCS12

A.1.3인증 요청서 생성

인증서를 신청하기 위해 인증 요청서가 필요합니다.

$ openssl req -new -key xpush.key -out xpush.csr

인증요청서의 이름을 지정하여 명령어 입력 후, 패스워드를 묻습니다. 패스워드 지정 후 추가 정보를 입력합니다.

추가 속성 정보는 입력하지 않고, Enter 키를 두 번 입력하면 인증요청서가 생성됩니다.

A.1.4개인 키 패스워드 제거 및 인증서 생성

키에 패스워드가 들어있으면, 웹 서버에 설정할 경우 비밀번호를 계속 물어볼 경우가 생기므로 개인 키 패스워드를 제거하고 인증서를 생성하는 것이 좋습니다.

$ cp xpush.key xpush.key.origin 
$ openssl rsa -in xpush.key.origin -out xpush.key

그림 A-1xpush.key.origin의 패스워드를 입력하면, 패스워드가 제거된 개인키가 생성됩니다.

개인키 xpush.key 파일과 인증요청서 xpush.csr을 통해 crt 인증서를 생성할 수 있습니다.

$ openssl x509 -req -days 365 -in xpush.csr -signkey xpush.key -out xpush.crt

그림 A-2xpush.key.origin의 패스워드를 입력하면, 패스워드가 제거된 개인키가 생성됩니다.

.crt 파일을 통해 인증서 포맷을 변경할 수 있으며 jks, pem, pcks 등의 확장자 파일로 변환이 가능합니다.

https://www.securesign.kr/guides/SSL-Certificate-Convert-Format

X-PUSH 서버에서는 클라이언트와의 암호화 통신을 지원하며, jks 파일을 통해 Certificate Service의 설정하여 SSL 프로토콜을 사용할 수 있습니다.

A.2JKS 인증서 파일 생성하기

아래의 명령어를 통해 .jks 인증서 파일을 생성할 수 있습니다.

$ keytool -genkey -v -keystore xpush.jks -alias server_private -keyalg RSA -sigalg MD5withRSA -keysize 1024 -validity 365

그림 A-3명령어 입력 후, 패스워드와 인증서 정보를 입력합니다.

A.3PKCS12 파일을 JKS 형식으로 변환하기

JDK 1.7 이상 버전에서 APNs로 Notification을 전송할 경우, SSL 관련 오류가 발생하거나 APNs로부터 InvalidToken 에러 코드를 받을 수 있습니다. 이는 APNs 인증서 파일을 PKCS12 형식에서 JKS 형식으로 변환하여 해결할 수 있습니다.

APNs 인증서 파일은 JDK내에 포함되는 keytool을 사용하여 변환할 수 있으며, keytool은 JDK가 설치된 경로의 bin 디렉토리에 있습니다.

아래 예제는 keytool을 사용하여 APNs-Certificates.p12 파일을 APNs-Certificates.jks 파일로 변환하는 명령어 예를 보여주고 있습니다.

$ keytool -importkeystore -destkeystore APNs-Certificates.jks
                           -srckeystore APNs-Certificates.p12 -srcstoretype PKCS12

명령어를 입력하면 아래와 같이 패스워드를 묻습니다.

Enter destination keystore password:
Re-enter new password:
Enter source keystore password:

순서대로 새로 생성할 JKS 형식 인증서의 패스워드 입력, 패스워드 재입력, PKCS12 형식의 원본 인증서 패스워드를 입력하여 인증서를 생성합니다.

아래 그림은 keytool을 사용하여 APNs-Certificates.p12파일을 APNs-Certificates.jks로 변환하는 예를 보여줍니다.

그림 A-4keytool을 사용하여 PKCS12 형식을 JKS 형식으로 변환

변환된 JKS 형식 인증서를 다음과 같이 설정합니다.
KeystoreType 항목을 인증서 형식에 맞도록 JKS로 변경합니다.
<service name="ApnsNotifierService" ... >
    ...
    <attribute name="KeystorePath">conf/APNs-Certificates.jks</attribute>
    <attribute name="KeystorePassword">xpush</attribute>
    <attribute name="KeystoreType">JKS</attribute>
    <attribute name="production">false</attribute>
    <attribute name="badge">true</attribute>
    <attribute name="retries">3</attribute>
    ...
</service>

A.4APNS 인증서 만들기

A.4.1애플 개발자 센터 접속

1

애플 개발자 센터 접속 developer.apple.com

로그인하려면 Account 메뉴 선택

그림 A-500-dev-apple-00-select-accn-menu

2

계정 입력하고 로그인

그림 A-600-dev-apple-01-log-in

3

Certificates, IDs & Profiles 선택하여 인증서 관리 화면으로 이동.

그림 A-700-dev-apple-02-select-cert-menu

A.4.2인증서 만들기

1

화면 우상단의 더하기( + ) 버튼 선택하여 인증서 생성 시작.

그림 A-801-gen-cert-01-new-cert

2

개발용(Sandbox) 또는 개발/운영 겸용(Sandbox & Production) 인증서 유형 선택.

그림 A-901-gen-cert-02-select-cert-type

3

생성될 인증서의 App ID 선택.

그림 A-1001-gen-cert-03-select-app-id

4

CSR 파일 생성 요청

그림 A-1101-gen-cert-04-create-csr

A.4.3CSR(인증요청서) 만들기

1

키체인 접근 - 인증서 지원 - 인증기관에서 인증서 요청

그림 A-1202-gen-csr-01-req-cert

그림 A-1302-gen-csr-02-sav-disk

그림 A-1402-gen-csr-03-naming-csr

인증 요청서는 앱마다 따로 만들어야 합니다. 예를 들어 APP1과 APP2의 인증 요청서를 같이 사용할 경우 푸쉬 알림을 같은 앱으로 받게 될 수 있습니다.

2

생성한 csr파일을 업로드

A.4.4인증서 만들기 완료

그림 A-1501-gen-cert-05-upload-csr

그림 A-1603-gen-cert-01-cert-ready

그림 A-1703-gen-cert-02-complete

A.4.5APNS 인증서 .p12 형식으로 내보내기

그림 A-1804-export-p12-02-export-with-prv-key

그림 A-1904-export-p12-03-sav-p12

그림 A-2004-export-p12-04-set-passwd

A.5APNS 인증서 갱신하기

APNS 인증서가 만료되면, 인증서를 갱신해야합니다. 인증서 갱신은 기존 인증서를 폐기하고 새로운 인증서를 만드는 형식입니다.

APNS 인증서를 갱신하기 전 , CSR 파일은 인증서마다 별도로 만들어야 합니다.

X-PUSH 서버에 갱신된 인증서를 사용하였더라도, 클라이언트 앱의 설정된 인증서 또한 만료되었다면 푸쉬 알림을 받지 못할 수 있습니다.

그림 A-21인증서 revoke

동일한 방법으로 APNS 인증서 만들기수행