먼저 키체인에서 해당 인증서를 이용해 .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 해주시면 됩니다.
리눅스 쪽은 찾아보진 않았지만 수정하면 되겠죵?ㅋ 참고하세요


서버 2대의 파일 동기화 문제로 상당히 고민이 많았다. rsync의 경우 단방향이라 사용할 수 없었고 계속 검색하던차에 unison을 알게 됐다. 말이 필요없다. 양방향 sync도 되고 한번 셋팅하면 건드릴 필요 없다.
한쪽 서버가 다운이 되어도 다시 켜기만하면 업데이트된 부분만 다시 동기화된다.

파일을 다운을 받으면 하나의 파일인데 여러가지 옵션으로 설정하여 동기화 할 수 있는데
이 명령은 일정시간마다 계속 실행 되도록 했다. 난 5초 단위로 설정해서 동기화 했다.

다운은
http://alan.petitepomme.net/projets/unison/index.html


설정방법은

아래의 블로그에서 보고 셋팅하였다.
http://tykim.wordpress.com/2008/01/11/

CentOS 5.3버전에서 해봤는데 잘된다.

'IT분야 > Linux' 카테고리의 다른 글

[Linux]unison을 이용한 양방향 동기화  (0) 2010.10.29
[Linux] CentOS 5.3 Server 셋팅  (0) 2010.08.25