먼저 키체인에서 해당 인증서를 이용해 .p12파일로 내보내기를 하여야 합니다.
PUSH인증서를 마우스 오른쪽 클릭하여 내보내기 합니다. (ex : cert.p12)
그리고 PUSH인증서에 물려있는 개인키 또한 내보내기 합니다. (ex : key.p12)

터미널을 열어서 2개의 파일이 있는 곳으로 이동하여 아래는 명령어를 입력합니다.

openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12
openssl pkcs12 -nocerts -out key.pem -in key.p12
openssl rsa -in key.pem -out key.unencrypted.pem
cat cert.pem key.unencrypted.pem > ck.pem


이렇게 하면 최종 산출물인 ck.pem 파일이 생성됩니다.
이 하나의 파일을 서버에 업로드 하면 됩니다.

아래는 서버단의 PHP소스 코드 입니다. 간단하게 인터넷에 널린 소스로 작성해 봤습니다.

<?php
$pass = 'C:\\APM_Setup\\htdocs\\ck.pem'; // 파일 경로

$token64 = '0fb09763c1278d20ec92045321501130fe16963728ecf98f3201b9c651e9a047'; // 테스트할 토큰..

// The actual notification payload
$body = array();
$body['aps'] = array('alert' => 'Message received from Bob');// 보낼 메세지

/* End of Configurable Items */

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $pass);
   
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if (!$fp) {
    echo "Failed to connect $err $errstr\n";
    return;
}      
       
$payload = json_encode($body);
// Thank you to the Perl example
$msg = chr(0).pack("n",32).pack('H*',$token64).pack("n",strlen($payload)).$payload;
fwrite($fp, $msg);
fclose($fp);

echo $err."  bbbb<br/>";
echo $errstr."    cccc";

?>
파일경로와 토큰만 제대로 써주시면 테스트하는데는 무리 없으리라 봅니다.

위와 같은 소스가 인터넷에 널려있는데.. 아무리 해도 안되길래..
$msg 쪽을 계속 바꿔봤더니 되더군요.. 소스마다 조금씩 틀리더군요..
그리고 php의 경우 openssl을 사용할 수 있도록 PHP에 설정을 해야합니다.

apmsetup의 경우 php확장 탭에 php_openssl.dll을 체크해주시고 restart 해주시면 됩니다.
리눅스 쪽은 찾아보진 않았지만 수정하면 되겠죵?ㅋ 참고하세요



1. Apache 다운로드
  - http://apache.org/ 에 가서 아래의 왼쪽 위 HTTP Server를 찾아서 클릭.(헷갈리면 Ctrl+F로 검색해서 찾음)


  - Download를 클릭

 - 각자의 서버환경에 맞추어 다운로드. 필자는 윈도우2003 이므로 httpd-2.2.17-win32-x86-no_ssl.msi 파일을 다운받았다.
 - 클릭하여 계속 Next를 눌러주어 설치한다. 아파치를 시작하고 http://localhost 로 접속하여 화면이 뜬다면 제대로 설치된 것 이다.

2. PHP 설치
 - http://www.php.net/downloads.php 가서 ZIP형태로 된 PHP파일을 다운받는다. 따로 설치라 할건 없고 그냥 다운받아서 원하는곳에  압축을 풀어놓는 형태다. 현재날자 기준으로 5.3버전이 최신버전인데.. 필자는 아파치랑 연동이 안되서 구버전인 php-5.2.11-Win32.zip 파일을 찾아서 다운받았다.

3. MySQL 설치
  - http://www.mysql.com/downloads/mysql/ 에 가서 메뉴에서 Downloads를 클릭하고 왼쪽의 MySQL Community Server를 클릭한다.

  - 오른쪽 화면에 파일 목록이 보일것이다. 각자에 입맛에 맞게 다운하고 설치한다. root 비밀번호 셋팅하고 까먹지 마시길..

4. 연동 설정

  - 아파치폴더/conf/httpd.conf를 열어서 맨 밑줄에  아래코드를  삽입한다. 파일명을 제외한 앞쪽 경로는 각자의 환경에 맞게 셋팅하시길...
#-------------------------------------------------------------------------------------------------------------
LoadModule php5_module "C:/PHP/php5apache2_2.dll"             
AddType application/x-httpd-php .php .html
PHPIniDir "C:/PHP"

AddDefaultCharset UTF-8
#-------------------------------------------------------------------------------------------------------------
  
  - PHP폴더/php.ini-dist 파일을 복사하여 php.ini로 파일 이름을 수정하고 맽 밑줄에 다음을 추가하고 PHP폴더에서 libmysql.dll파일을 C:\windows\system32 폴더로 복사
#-------------------------------------------------------------------------------------------------------------
default_charset="utf-8"
#-------------------------------------------------------------------------------------------------------------

  - MySQL 설정.
    특별히 변경할 것은 없다. 다만 케릭터셋 변경이 필요하다면 MySQL폴더/my.ini 파일을 수정한다.
    default-character-set으로 되어 있는 부분을 찾아.. 변경/추가한다.
#-------------------------------------------------------------------------------------------------------------
  [mysql]
  default-character-set=utf8
  [mysqld]
  default-character-set=utf8
#-------------------------------------------------------------------------------------------------------------

5. 설정 확인
  - 파일을 하나 만들어서 열어본다. 아파치 홈폴더를 변경하지 않았을 경우 기본적으로 아파치폴더/htdocs가 잡히므로 거기에 만들면 된다.
#-------------------------------------------------------------------------------------------------------------
<?
phpinfo();
?>
#-------------------------------------------------------------------------------------------------------------
  위 파일을 웹브라우저에서 열어보면 php환경설정을 볼수 있다. 케릭터셋이나 디비연동등을 확인해본다.


설정 끝