[Push通知]APNsの設定(サーバ編)


## 用意するもの
AppleID
サーバ
appIDはすでに作られてるものとします。

## 証明書を要求するための準備
「アプリケーション」 ->「ユーティリティ」で
キーチェーンアクセス.app を起動

### キーチェーンのメニューから環境設定を呼び出す。
「メニュー」 -> 「環境設定」
証明書のタブを選択する

### 以下の項目のチェックを外す
- オンライン証明書状況プロトコル（切）
- 証明書失効リスト（切）

### 認証局に証明書を要求を呼び出す。
「キーチェーンアクセス」 -> 「証明書アシスタント」
->「認証局に証明書を要求」
閉じる。
![証明書情報.tiff](https://qiita-image-store.s3.amazonaws.com/0/38628/39c6223e-1f6d-dc66-3b20-7a2b0248ae11.tiff "証明書情報.tiff")


### 証明書アシスタントに以下を入力
- ユーザーのメールアドレス : 開発者のメールアドレス
- 通称：適当な名前、何でもよい
- CAのメールアドレス : 無記入でよい
- 要求の処理 : ディスクに保存 と 鍵ペア情報を指定にチェック

### 証明書要求の保存
CertificateSigningRequest.certSigningRequest をデスクトップに保存するように設定

### 鍵ペア情報
![鍵ペア情報.tiff](https://qiita-image-store.s3.amazonaws.com/0/38628/b92ad6fd-ef9e-4766-2cfd-109d56eec5e4.tiff "鍵ペア情報.tiff")
2048bit、RSA方式であることを確認して続行

### 完了
証明書要求が保存される。
![設定結果.tiff](https://qiita-image-store.s3.amazonaws.com/0/38628/892dad6c-1a66-aabc-c46e-ff35254ddd3c.tiff "設定結果.tiff")

## 対象のappIDに証明書を登録する
### appIDをクリック
appIDをクリックするとこんな感じに開く。
![IDクリック.tiff](https://qiita-image-store.s3.amazonaws.com/0/38628/690481c6-612f-510a-ff38-afd2c123826e.tiff "IDクリック.tiff")
Editをクリックして次へ

### Push Notificationを選択する
Push Notificationを選んで「Create Certificate」を選ぶ
![PushNotification.tiff](https://qiita-image-store.s3.amazonaws.com/0/38628/babb2a08-3abc-b3b8-72b2-14c51a31c5d5.tiff "PushNotification.tiff")

### はじまり
![CSR_start.tiff](https://qiita-image-store.s3.amazonaws.com/0/38628/8e47cea2-4c4f-3998-23be-63eb85a2dfef.tiff "CSR_start.tiff")
続ける

### 作った証明書リクエストを選択する
先ほど作成した「CertificateSigningRequest.certSigningRequest」を選択する
![chooseCSR.tiff](https://qiita-image-store.s3.amazonaws.com/0/38628/4fa3a599-6269-3a03-1846-39fa6171f506.tiff "chooseCSR.tiff")
選択したら「Generate」する

### 証明書が出来上がるのでダウンロード
ダウンロードボタンをポチッと。
![証明書ダウンロード.tiff](https://qiita-image-store.s3.amazonaws.com/0/38628/96754e07-2ff6-26c5-b0f3-df7d995c9f2b.tiff "証明書ダウンロード.tiff")

### ダウンロードしたCSRとキーチェーンを紐付ける
ダウンロードしたファイルをダブルクリックすると、キーチェーンに登録される。

## サーバに登録
### 秘密鍵を書き出す
キーチェーンを開いて、先ほど作った証明書にフォーカスを当てる。
左下の「分類」で「証明書」でフィルターすると、フォーカスが当たってた証明書に▼が表示されるようになる。
展開すると秘密鍵が見れるようになる(ここで色々ハマったｗ)
p12形式で「xxx_production.p12」って感じで書きだす。
書き出したら以下コマンドを使ってpem形式に変換する。ついでにrsa形式にもする

```コンソール
openssl pkcs12 -in [書きだした秘密鍵].p12 -out [なんでも良い].pem -nodes -clcerts
openssl rsa -in [変換したファイル名].pem -out [変換したファイル名]_noenc.pem
```

### キーチェーンに登録している証明書を書き出す
キーチェーンで登録した証明書にフォーカスをあてて、右クリック。
「書き出す」を選択する。
フォーマットに「.pem」を選択する
![証明書書き出し.tiff](https://qiita-image-store.s3.amazonaws.com/0/38628/8868517d-0ade-22df-145c-37ea912cb563.tiff "証明書書き出し.tiff")

### 証明書ファイルの結合
作った秘密鍵と証明書を連結する

```コンソール
cat [証明書].pem [秘密鍵]_noenc.pem > [わかりやすいファイル名].pem
```

### サーバに配置
最終的に出来たファイルをftpツールでもなんでもいいので、サーバの適当なディレクトリに配置する(アプリによって異なると思うので割愛)

## 総括
とりあえず証明書はめんどい！！
APNsに証明書設定してもエラーになるからなんでやと思ったら秘密鍵が必要だったり、秘密鍵がどこにあるかわからず右往左往したり…
微妙にAppleさん変わってたりするところが素人には厳しいところ

## お世話になったサイト
[APNSのpemファイル作成用のシェル関数](http://qiita.com/w650/items/62cd6fad554e787c902c)
[Apple Push Notification Serviceを使ってiOSにプッシュ通知をするために必要な証明書の準備方法](http://d.hatena.ne.jp/samril/20130902/1378198909)
[[iPhone] APNs プッシュ通知（１）デバイストークンの取得](http://akira-watson.com/iphone/push-notification_1.html)
[[iPhone] APNs プッシュ通知（3）リモート通知の取得](http://akira-watson.com/iphone/push-notification_3.html)