5

最近、自分のアプリの 1 つに iOS プッシュ通知サービスを作成することを検討しています。Python 2.7 バックエンドがあるので、PHP (またはその他のもの) ではなく Python で実行したいと考えました。

通知を送信し、デバイスがそれを受信するコードがありますが、コードを実行するたびに、PEM ファイルの「パスフレーズ」を手動で入力するよう求められます。

これは理想的ではありません。サーバー上でこれをすべて自動化したいので、通知を送信する必要がある場合は、送信するだけです。Python 2.7 のドキュメントには、接続時に変数からパスフレーズを自動的に設定できるものは何も見つかりません。

Python 2.7でこれを行う方法やその他のアイデアを知っている人がいれば、本当に感謝しています。

コードのスニペットを次に示します。

certfile = 'devPEM.pem'
apns_address = ('gateway.sandbox.push.apple.com', 2195)

s = socket.socket()
sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3, certfile=certfile)
sock.connect(apns_address)

前もって感謝します。

4

1 に答える 1

18

したがって、BorrajaX が提案した答えは、プロンプトが表示されたときにキーのパスワードを設定しないことでした。ただし、(少なくとも私の Mac では) パスワードを 4 文字以上にする必要があるため、これは不可能です。

これを修正する手順は次のとおりです。

  1. 開発者ポータルで証明書を作成します。
  2. Keychain Access でローカルに証明書をダウンロードして開きます
  3. Keychain Access から証明書の秘密鍵を .p12 ファイルとしてエクスポートします (aps_key.p12 という名前を付けました)。
  4. .p12 キーで次を実行します。
    openssl pkcs12 -nocerts -out aps_key.pem -in aps_key.p12
  5. パスワードを入力します (すぐに削除します)。
  6. 次のコマンドを実行して、パスワードを削除します。
    openssl rsa -in aps_key.pem -out new_aps_key.pem
  7. Developer Center からダウンロードした .cer を .pem ファイルに変換します。
    openssl x509 -in aps.cer -inform der -out aps.pem
  8. キーと証明書の .pem ファイルを次のようにマージします。
    cat aps.pem new_aps_key.pem > final_aps.pem
  9. を除く他のすべてのファイルを削除できるようになりましfinal_aps.pemた。

ファイルはfinal_aps.pem、パスワード/パスフレーズの入力を求められることなく、上記のコードで機能します。

これは、.pem ファイルからパスワードを削除するためのコードを見つけた便利な Web サイトです: http://www.sslshopper.com/article-most-common-openssl-commands.html

編集: 同じファイルに証明書とキーが必要ない場合は、手順 8 を無視してファイルaps.pemnew_aps_key.pemファイルを使用できます。

于 2012-12-03T22:13:45.200 に答える