인증서

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

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

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

OpenSSL 버전 확인

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

$ rpm -qa openssl 
$ openssl version

개인키 생성

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

$ openssl genrsa -des3 -out xpush.key 2048

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

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

인증 요청서 생성

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

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

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

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

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

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

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

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

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

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

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

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

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

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

JKS 인증서 파일 생성하기

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

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

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

PKCS12 파일을 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로 변환하는 예를 보여줍니다.

keytool을 사용하여 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>

APNS 인증서 만들기

이 문서는 2021년 05월 04일 기준으로 생성되었습니다.


문서 내용이 상이 할 경우 APPLE Document 사이트를 참고 하시기 바랍니다.

https://help.apple.com/developer-account

Identifiers 생성

1

애플 개발자 센터 접속 developer.apple.com (로그인)

2

Certificates, Identifiers & Profiles(인증서, 식별자 및 프로파일)(영문)에서 사이드바의 Identifiers(식별자)를 선택한 다음 왼쪽 상단 모서리에 있는 Add(추가) 버튼(+)을 클릭합니다.

3

옵션 목록에서 App ID를 선택한 다음 Continue(계속)를 클릭합니다.

4

옵션에서 App ID 유형이 자동으로 선택되었는지 확인하고 Continue(계속)를 클릭

5

Description(설명) 필드에 App ID의 이름 또는 설명을 입력합니다.

6

Push Notification 기능을 사용하려면 Explicit App ID(명시적인 App ID)를 생성해야 합니다. Explicit App ID(명시적인 App ID)를 선택하고 Bundle ID(번들 ID) 필드에 앱의 번들 ID를 입력합니다.

7

여기에 입력한 Explicit App ID(명시적인 App ID)는 Xcode에서 해당 Summary(요약) 패널에 입력한 번들 ID와 일치해야 합니다.

8

Capabilities 의 옵션 중 Push Notifications 를 선택하여 앱 기능을 활성화합니다.

9

Continue(계속)를 클릭한 다음 등록 정보를 검토하고 Register(등록)를 클릭합니다.

인증서 서명 요청 생성하기(CSR)

1

/응용 프로그램/유틸리티에 있는 키체인 접근을 실행합니다.

2

키체인 접근 > 인증서 지원 > 인증 기관에서 인증서 요청을 선택합니다.

3

인증서 지원 대화상자의 사용자 이메일 주소 필드에 이메일 주소를 입력합니다.

4

일반 이름 필드에 키 이름을 입력합니다(예: Gita Kumar Dev Key).

5

CA 이메일 주소 필드는 비워 둡니다.

6

“디스크에 저장됨”을 선택하고 계속을 클릭합니다.

7

CertificateSigningRequest.certSigningRequest 파일 저장을 클릭합니다.

APNs 클라이언트 TLS 인증서 생성하기

1

Certificates, Identifiers & Profiles(인증서, 식별자 및 프로파일)(영문)에서 사이드바의 Certificates(인증서)를 선택합니다.

2

왼쪽 상단 모서리에 있는 Add(추가) 버튼(+)을 클릭합니다.

3

Services 아래에서 Apple Push Notification service SSL (Sandbox)를 선택한 다음 Continue(계속)를 클릭합니다.

4

해당 App ID 선택 후 Continue(계속)를 클릭합니다.

5

Choose File(파일 선택)을 클릭합니다.

6

대화상자가 나타나면 4.2 에서 생성한 인증서 요청 파일(확장자가 .certSigningRequest인 파일 CSR)을 선택한 다음 Choose(선택)를 클릭합니다.

7

Continue(계속)를 클릭합니다.

8

Download(다운로드)를 클릭합니다.

9

인증서 파일(확장자가 .cer인 파일)이 다운로드 폴더에 다운로드됩니다.

Mac에서 클라이언트 TLS 신원 정보 내보내기

1

4.3 에서 생성한 인증서 파일(.cer) 를 더블 클릭하여 키체인에 추가합니다.

2

키체인 접근을 실행합니다

3

카테고리 섹션에서 내 인증서를 선택합니다.

4

내보낼 인증서를 찾아 해당 인증서의 내용을 공개합니다. 인증서와 개인 키가 모두 나타납니다.

5

인증서와 키를 모두 선택한 다음 파일 > 항목 내보내기를 선택합니다.

6

파일 포맷 팝업 메뉴에서 서버에 허용되는 파일 포맷(.p12)을 선택합니다.

7

별도 저장 필드에 파일 이름을 입력하고 저장을 클릭합니다.

APNS 인증서 갱신하기

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

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

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

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