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 파일과 인증요청서 xpush.csr을 통해 crt 인증서를 생성할 수 있습니다.
$ openssl x509 -req -days 365 -in xpush.csr -signkey xpush.key -out xpush.crt
.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로 변환하는 예를 보여줍니다.
변환된 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 인증서 만들기수행합니다.