WordPressの管理画面のセキュリティを高めるプラグイン

自分のブログは最低限のセキュリティ対策はしているつもりでしたが、仕事で管理しているWordPressのサイトにバックドアが仕込まれていて、実害は無かったもののヒヤヒヤしたので、さらにセキュリティを高めるべくプラグインを導入しました。

Crazy Bone (狂骨)

WordPress › Crazy Bone « WordPress Plugins.

ログインが実行されたログ(IPやユーザー名等)の取得ができるプラグイン。
設定は特に無く、管理画面の[ユーザー]->[ログイン履歴]でログの確認ができる。
導入してみたら、大したアクセスのないこのブログでも、結構アタック来ててビックリしました。

ログイン履歴_‹_suusuke_-_blog_—_WordPress

Simple Login Lockdown

WordPress › Simple Login Lockdown « WordPress Plugins.

ログインするときのIDやパスワードの入力を間違えた場合に、ログインできなくすることができるプラグイン。
設定画面から、ログインチャレンジ回数、ログインできなくする時間を設定できる。
表示設定_‹_suusuke_-_blog_—_WordPress
実際に、指定したチャレンジ回数ログインに失敗すると、以下のようになって、ログインできなくなる。
Too_many_login_attemps

セキュリティに対して、認識が甘かったなと痛感した出来事でした。

Apache起動時のSSLパスフレーズを自動入力にする

Apache起動時にSSLが有効にしているとパスフレーズを対話形式で入力する必要がある。
通常起動する場合は問題ないが、VPSの都合でマシンの再起動された場合、Apacheは自動で起動するようにしているが、パスフレーズの入力が無いので、起動に失敗してWEBサーバーが止まってしまっている事が何回か有ったので、それを自動で入力するようにする。

仕組みとしては、

  1. パスフレーズを標準出力するシェルを作成
  2. パスフレーズの入力を対話形式から外部プログラムに変更

シェル(ppfilter.sh)の作成

[root@suusuke ~]# vi /etc/httpd/ppfilter.sh 
#!/bin/sh
echo "パスフレーズ"
[root@suusuke ~]# chmod 700 /etc/httpd/ppfilter.sh

パスフレーズの入力方法を変更(ssl.conf)

[root@suusuke ~]# vi /etc/httpd/conf.d/ssl.conf 
#SSLPassPhraseDialog  builtin
SSLPassPhraseDialog  exec:/etc/httpd/ppfilter.sh

さくらVPSでメールサーバー構築(Postfix+Dovecot2+ClamAV+SpamAssassin+Amavisd-new)

メールサーバーについて気になった事が有ったので、さくらVPS環境で、メールサーバー構築した際の備忘録です。

  • バーチャルドメインで運用を想定している為、MySQLを利用して、管理はPostfixAdminで行えるようにします。
  • 通信はTSLを利用します。
  • アンチウィルス、スパムフィルタを利用します。
メールサーバー Postfix 2.6.6
POP、IMAPサーバー Dovecot 2.0.9
アンチウィルスソフトウェア ClamAV 0.97
スパムフィルタソフトウェア SpamAssassin 3.3.1
メールサーバー、アンチウィルスソフトウェア、スパムフィルタソフトウェアのインターフェースソフトウェア Amavised-new 2.8.0
メールアカウント管理 PostfixAdmin 2.3.6

PostfixAdminのインストールと設定

PostfixAdmin からソースをダウンロードして、解凍後、公開ディレクトリにFTPなどでアップロードします。今回は公開ディレクトリを下記のような形で設定し、PostfixAdminを配置しました。

/home/webadmin/public_html ← ドキュメントルート 
/home/webadmin/public_html/postfixadmin 

PostfixAdminで使用するDB、Userの作成

データベースをpostfix、ユーザーをpostfixで作成しました。

create database postfix GRANT ALL PRIVILEGES ON *.* TO 'postfix'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH GRANT OPTION; 

PostfixAdminの設定

設定ファイルは、config.inc.phpですが、config.local.phpというファイルがある場合は、設定を上書きするので、config.local.phpを作成して、設定内容を記述します。

 
vi /home/webadmin/public_html/postfixadmin/config.local.php 

<?php $CONF['configured'] = true; 
$CONF['setup_password'] = 'changeme'; // ブラウザからアクセスした後に設定する 
$CONF['default_language'] = 'ja'; 
$CONF['database_type'] = 'mysqli'; 
$CONF['database_host'] = 'localhost'; 
$CONF['database_user'] = 'postfix'; 
$CONF['database_password'] = 'XXXXXXX'; 
$CONF['database_name'] = 'postfix'; 
$CONF['database_prefix'] = ''; 
$CONF['admin_email'] = 'postmaster@ドメイン名'; 
$CONF['encrypt'] = 'md5crypt'; // パスワードの暗号化方式 
$CONF['page_size'] = '100'; 
$CONF['domain_path'] = 'YES'; // メールボックス用に、ドメインごとにディレクトリを作成する /home/virtual/virtualdomain.com/ 
$CONF['aliases'] = '100'; 
$CONF['mailboxes'] = '100'; 
$CONF['maxquota'] = '100'; 
$CONF['quota'] = 'YES'; 
$CONF['backup'] = 'NO'; 
$CONF['sendmail'] = 'NO'; 
$CONF['fetchmail'] = 'NO'; 
$CONF['new_quota_table'] = 'YES'; // dovecotのバージョンが1.2以下の場合はNOにする。 
$CONF['user_footer_link'] = 'http://ドメイン名/postfixadmin/users/main.php'; 

// procmail使用時の設定 
// メールディレクトリ自動作成 
$CONF['mailbox_postcreation_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh'; 
// メールディレクトリ自動削除 
$CONF['mailbox_postdeletion_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh'; 
// ドメインディレクトリ自動削除 
$CONF['domain_postdeletion_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh'; 
?>

バーチャルドメインメールを保存しておくディレクトリ、ユーザーの作成

バーチャルドメインでは、メールボックスとUNIXユーザーは切り離されて、メールは指定したバーチャルドメイン用のメールボックスに配送されます。そのユーザーを作成します。

 #groupadd -g 5000 virtual #useradd -g 5000 -u 5000 virtual 

設定後、http://ドメイン/postfixadmin/setup.phpにアクセスします。

imap関数がないとWarningが出たので、

 
# yum install php-imap 

としてインストールしました。インストール後はapacheを再起動します。

 
# /sbin/service/httpd restart 

その後、http://ドメイン/postfixadmin/setup.phpにアクセスし、Warningが出ないことを確認したら、パスワードの設定をして、管理画面からドメイン、ユーザーを追加します。

セットアップが完了したら、セットアップ用のファイルを削除します。

 
# rm -f /home/webadmin/public_html/postfixadmin/setup.php 
# rm -f /home/webadmin/public_html/postfixadmin/motd* 

Postfixのインストールと設定

さくらVPSにははじめからPostfixがインストールされています。

インストール済みのPostfixが対応しているルックアップテーブルを表示して、MySQLに対応しているか確認します。

 
# postconf -m btree cidr environ hash ldap mysql nis pcre proxy regexp static unix 

mysqlと表示されているのでMySQLに対応していることが確認できます。

PostfixからMySQLへアクセスする為のファイルを作成します。

 
# vi /etc/postfix/mysql_virtual_alias_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = alias 
select_field = goto 
where_field = address 

# vi /etc/postfix/mysql_virtual_domains_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = domain 
select_field = domain 
where_field = domain 
additional_conditions = and active = '1' 

# vi /etc/postfix/mysql_virtual_mailbox_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = mailbox 
select_field = maildir 
where_field = username 

# vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = mailbox 
select_field = quota 
where_field = username 
#additional_conditions = and active = '1' 

Postfixの設定ファイルを編集します。

設定ファイルを変更する場合は全て、オリジナルのバックアップをとってから行いました。

 
# cp /etc/postfix/{main.cf,main.cf.org} 
 
# vi /etc/postfix/main.cf 

#inet_interfaces = localhost #コメントアウト 
#inet_protocols = all #コメントアウト 
#mydestination = $myhostname, localhost.$mydomain, localhost #コメントアウト 

#最終行に追加 
myhostname = wwwXXXXX.sakura.ne.jp #さくらのホスト名 
inet_interfaces = all # 外部からのメールも受信する 
inet_protocols = ipv4 mydestination = $myhostname, localhost 
relay_domains = $mydestination 
home_mailbox = Maildir/ 
smtpd_banner = $myhostname ESMTP unknown 

# Virtual Domain w/MySQL 
local_transport = local 
virtual_transport = procmail # メールの配送はprocmail 

procmail_destination_recipient_limit = 1 
virtual_mailbox_base = /home/virtual 
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf 
virtual_alias_domains = $virtual_alias_maps 
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf 
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf 
virtual_minimum_uid = 5000 
virtual_uid_maps = static:5000 
virtual_gid_maps = static:5000 

maximal_backoff_time = 800s 
minimal_backoff_time = 100s 
bounce_queue_lifetime = 60m 
maximal_queue_lifetime = 60m 
message_size_limit = 20480000 
#virtual_mailbox_limit = 51200000 
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf 
virtual_mailbox_limit_override = yes 
virtual_overquota_bounce = yes 
virtual_mailbox_limit_inbox = yes 

smtpd_sasl_auth_enable = yes 
smtpd_sasl_type = dovecot 
smtpd_sasl_path = private/auth 
smtpd_sasl_local_domain = $myhostname 
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination 

# SpamAssasin 
# procmailと連携するようにする。 
mailbox_command = /usr/bin/procmail 
# End SpamAssasin 

# amavisd-new 
# amavisd-newと連携するように設定 
content_filter=smtp-amavis:[127.0.0.1]:10024 
# End amavisd-new 

新規ユーザーが追加されたらホームディレクトリに Mairdir/ を自動で作成されるようにする。

 
# mkdir -p /etc/skel/Maildir/{new,cur,tmp} 
# chmod -R 700 /etc/skel/Maildir/ 

サブミッションポート587番ポートを利用する。

 
# cp /etc/postfix/{master.cf,master.cf.org} 
# vi /etc/postfix/master.cf 

#最終行に追加 
submission inet n - n - - smtpd 
# amavisd-new
smtp-amavis unix -    -    n    -    2  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
127.0.0.1:10025 inet n    -    n    -    -  smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
# End amavisd-new

# procmail
procmail unix - n n - - pipe
  flags=R user=virtual argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc
# End procmail

最後に自動起動の設定をして終了です。

 
# /sbin/chkconfig postfix on 

dovecot2のインストールと設定

yumでインストールする。

 
# yum install dovecot dovecot-mysql 

dovecot2の設定ファイルは/etc/dovecot/dovecot.confですが、/etc/dovecot/conf.d/以下に.confファイルを作成すれば自動で読みこんでくれるので、00-base.confというファイルを作成し設定を行います。

 
# vi /etc/dovecot/conf.d/00-base.conf 
# debug
auth_debug_passwords = yes
auth_verbose = yes
auth_debug = yes

listen = *
disable_plaintext_auth = no
auth_mechanisms = plain login digest-md5 cram-md5

# mail dir
mail_location = maildir:/home/virtual/%d/%u
first_valid_uid = 5000
first_valid_gid = 5000
mail_plugins = quota

protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
  mail_plugins = $mail_plugins imap_quota
}
protocol pop3 {
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-postfixadmin-mysql.conf
}
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-postfixadmin-mysql.conf
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
}
plugin {
  quota = maildir:User quota
}

次に、/etc/dovecot/conf.d/10-auth.confを編集します。

 
# cp /etc/dovecot/conf.d/{10-auth.conf,10-auth.conf.org} 
# vi /etc/dovecot/conf.d/10-auth.conf 

#auth_mechanisms = plain #コメントアウト 
#!include auth-system.conf.ext #コメントアウト 

次に、MySQLへの接続ファイルを作成します。

 
# vi /etc/dovecot/dovecot-postfixadmin-mysql.conf 
driver = mysql 
connect = host=/var/run/mysqld/mysqld.sock 
dbname=postfix 
user=postfix 
password=XXXXXX 
default_pass_scheme = MD5-CRYPT 
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1' 
user_query = SELECT concat('/home/virtual/', maildir) AS home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active = '1' 

次に、認証用ライブラリをインストールします。

 
# yum install cyrus-sasl-plain cyrus-sasl-md5 

最後自動起動の設定をして終了です。

 
# /sbin/chkconfig dovecot on 

ClamAVのインストールと設定

yumでインストール

# yum install clamd

バックアップを取って、設定(実行ユーザー(root)にする)

# cp /etc/{clamd.conf,clamd.conf.org} 
# vi /etc/clamd.conf

#User clam #コメントアウト

起動と自動起動設定

# /etc/init.d/clamd start
# chkconfig clamd on

ウイルス定義ファイル更新機能を有効化と、定義ファイルの更新

# sed -i 's/Example/#Example/g' /etc/freshclam.conf
# freshclam

ClamAVとPostfixの連携設定

# vi /etc/clamd.conf

#TCPSocket 3310 #コメントアウト

/etc/init.d/clamd restart

Amavised-newのインストールと設定

yumでインストール

# yum install amavisd-new

バックアップを取って、設定

# cp /etc/amavisd/{amavisd.conf,amavisd.conf.org} 
# vi /etc/amavisd/amavisd.conf

# COMMONLY ADJUSTED SETTINGS:
$undecipherable_subject_tag = ''; #←追加(パスワード付ZIPファイル受信時メール件名に「***UNCHECKED***」と付加されないようにする。)

@bypass_spam_checks_maps  = (1);  # controls running of anti-spam code #←コメントアウト解除(amavisd-newではスパムチェックは行なわないようにする。スパムチェックはprocmail経由でspamcコマンドで行なう)

$mydomain = 'wwwXXXXX.sakura.ne.jp';   # a convenient default for other settings #←コメントアウト解除してホスト名に変更する

#$QUARANTINEDIR = undef;      # -Q #←コメントアウト(ウィルスメールは隔離しない)

#$virus_admin               = undef; #←コメントアウト(ウィルス検知メールを管理者宛に通知しない)

### BLOCKED ANYWHERE
# qr'^UNDECIPHERABLE$',  # is or contains any undecipherable components
# qr'^\.(exe-ms|dll)$',                   # banned file(1) types, rudimentary #←コメントアウト(exeファイルを受信できるようにする)
# qr'^\.(exe|lha|cab|dll)$',              # banned file(1) types


# #   this entry; when running chrooted one may prefer socket "$MYHOME/clamd".
# ↓追加(/var/run/clamav/clamd.sockはソケット名変更)
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
  qr/\bOK$/m, qr/\bFOUND$/m,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

起動と自動起動設定

# /etc/init.d/amavisd start
# chkconfig amavisd on

SpamAssassin設定

起動と自動起動設定

# /etc/init.d/spamassassin start
# chkconfig spamassassin on

バックアップを取って設定

# cp /etc/mail/spamassassin/{v310.pre,v310.pre.org}
# vi /etc/mail/spamassassin/v310.pre


loadplugin Mail::SpamAssassin::Plugin::TextCat #←コメントアウト解除

rootユーザーでSpamAssassin設定ファイル最新化スクリプト作成

# cd ~
# vi spamassassin-update
#!/bin/bash

# SpamAssassin設定ファイル最新版ダウンロード
cd /etc/mail/spamassassin
wget -qN http://www.flcl.org/~yoh/user_prefs

# 設定ファイル更新時のみSpamAssassin再起動
diff user_prefs user_prefs.org > /dev/null 2>&1
if [ $? -ne 0 ]; then
    cp user_prefs local.cf

    # スパム判断したメールを添付形式にしないように設定
    echo "report_safe 0" >> local.cf

    # スパム判断したメールの件名に「***SPAM***」を付加するように設定※受信メールサーバーがPOPの場合のみ
    echo "rewrite_header Subject ***SPAM***" >> local.cf

    # SpamAssassin再起動
    /etc/rc.d/init.d/spamassassin restart > /dev/null
fi
cp user_prefs user_prefs.org

実行権限追加

# chmod +x spamassassin-update

一度実行して、最新にする

# ./spamassassin-update

cronに登録する

# mv spamassassin-update /etc/cron.daily/

procmailの設定ファイルを新規作成する

# vi /etc/procmailrc
SHELL=/bin/bash
PATH=/usr/bin:/bin
DEFAULT=/home/virtual/$DOMAIN/$USER\@$DOMAIN/
LOCKFILE=/home/virtual/procmail.lock
LOGFILE=/home/virtual/procmail.log
#VERBOSE=ON

# SpamAssassin Spam Check
:0fw
|/usr/bin/spamc


:0
*^X-Spam-Flag: YES
$SPAM

ログの設定

# vi /etc/logrotate.d/procmail
/home/virtual/procmail.log {
    missingok
    nocreate
    notifempty
}

メールディレクトリの自動作成・削除

PostfixAdminを使ってアカウント追加・削除する際に、ディレクトリを自動で作成・削除するようにスクリプトを作成する。

メールボックス作成・削除スクリプト用ディレクトリ作成

# mkdir /usr/local/bin/postfixadmin

PostfixAdminに有るスクリプトをコピー

# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin/postfixadmin
# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin/postfixadmin
# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh /usr/local/bin/postfixadmin

削除したメールボックスを保存するディレクトリを作成

# mkdir /home/virtual/.deleted-maildirs
# chmod 0700 /home/virtual/.deleted-maildirs
# chown virtual:virtual /home/virtual/.deleted-maildirs

スクリプトの編集(メールボックス作成)

# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh
#basedir=/var/spool/maildirs #←コメントアウト
basedir=/home/virtual        #←追加
# ↓コメントアウト
#maildirmake "$maildir"
#if [ ! -d "$maildir" ]; then
#    echo "$0: maildirmake didn't produce a directory; bailing out."
#    exit 1
#fi

exit 0の前に追加

mkdir "$maildir"
if [ ! -d "$maildir" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}cur"
if [ ! -d "${maildir}cur" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}new"
if [ ! -d "${maildir}new" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}tmp"
if [ ! -d "${maildir}tmp" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

chown -R virtual:virtual "$maildir"
chmod -R 700 "$maildir"

スクリプトの編集(メールボックス削除)

# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh
#basedir=/var/spool/maildirs
basedir=/home/virtual
#trashbase=/var/spool/deleted-maildirs
trashbase=/home/virtual/.deleted-maildirs
#subdir=`echo "$1" | sed 's/@.*//'`
subdir=$1

スクリプトの編集(ドメイン削除用)

# vi /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh
#basedir=/var/spool/maildirs
basedir=/home/virtual
#trashbase=/var/spool/deleted-maildirs
trashbase=/home/virtual/.deleted-maildirs

実行権限追加

# chmod 0700 /usr/local/bin/postfixadmin/postfixadmin*

apacheがsudo出来るように設定する

# visudo
Defaults    requiretty
Defaults:apache    !requiretty #←追加


root    ALL=(ALL)       ALL
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh #←追加
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh #←追加
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh #←追加

再起動して確認

/etc/init.d/postfix restart
/etc/init.d/dovecot restart
/etc/init.d/spamassassin restart
/etc/init.d/clamd restart
/etc/init.d/amavisd restart

TSLの設定追記…

Push Notification Push SSL Certificate 更新

Push Notification Push SSL Certificate の更新時期が迫ってきたので、更新の際の備忘録。

目次

  • Certificateの更新
  • 鍵の生成

Certificateの更新

  1. iOS Dev Center – Apple Developer にログインする。
  2. 対象のApp IDから「Settings」をクリックする。
    スクリーンショット_13_05_29_11_40-3
    スクリーンショット_13_05_29_11_42
  3. 「Create Certificate…」をクリックして(今回はリリース用Production)、CSR(証明書署名要求ファイル)をアップロードする。CSR(証明書署名要求ファイル)の作成方法は suusuke – blog – プロビジョニングファイル作成から実機転送手順 参照
    スクリーンショット_13_05_29_11_43
  4. アップロードすると、Certificateがダウンロードできるようになるので、ダウンロードしたaps_production.cerファイルをダブルクリックしてキーチェーンに登録する。
    スクリーンショット_13_05_29_15_31

鍵の生成

  1. キーチェーンを開き、登録した証明書を .p12形式でエクスポートする。
    スクリーンショット_13_06_05_16_10
    1. 右クリック→書き出す→フォーマットを「個人情報交換(.p12)」形式にして、保存する。ファイル名は「apns-pro-cert.p12」
      スクリーンショット_13_06_05_16_18
    2. パスワードは何でもOK、キーチェーンのアクセス許可のパスワード聞かれる場合はmacのrootのパスワード
      無題-3
  2. 1と同様の手順で、秘密鍵もエクスポートする。ファイル名は「apns-pro-key.p12」
    スクリーンショット_13_06_05_16_24-2
  3. pam形式に変換する。
    1.  
      iMac:Desktop user$ openssl pkcs12 -clcerts -nokeys -out apns-pro-cert.pem -in apns-pro-cert.p12 
      Enter Import Password: //←キーチェーンで入力したパスワード 
      MAC verified OK 
      iMac:Desktop user$ openssl pkcs12 -nocerts -out apns-pro-key.pem -in apns-pro-key.p12 
      Enter Import Password: //←キーチェーンで入力したパスワード 
      MAC verified OK 
      Enter PEM pass phrase: 
      Verifying - Enter PEM pass phrase: 
      iMac:Desktop user$ openssl rsa -in apns-pro-key.pem -out apns-pro-key-noenc.pem 
      Enter pass phrase for apns-pro-key.pem: //←key作成時に入力したパスフレーズ 
      writing RSA key 
      iMac:Desktop user$ cat apns-pro-cert.pem apns-pro-key-noenc.pem > apns-pro.pam
      
  4. 作成した「apns-pro-cert.pem」、「apns-pro.pam」をアップロードして更新

ドキュメント:https://developer.apple.com/jp/devcenter/ios/library/documentation/RemoteNotificationsPG.pdf

今回はサーバー側はPerlで作られているアプリだったので、Push Notificationを使ってみる – iOSアプリ開発トピック が参考になりました。

証明書(Certificates)、Provisioning Profiles 更新 – 新しいUI編

iOS Dev Center の Provisioning Portal(今は呼び名が違う!?) の UIが変更になって非常に使いやすく、分かりやすくなったと思います。
今回、CertificateとProvisioning Profileの更新をしたので、備忘録。

・有効期限が切れたProvisioning Profileを選択する。
iOS Provisioning Profiles (Distribution)

Editボタンをクリック
iOS Provisioning Profiles (Distribution)

・有効なCertificateが無いので、Create Certificateをクリック
3

・App Storeリリース用のCertificateを作成したいので、App Store and Ad Hocを選択
_4

continueクリック
_5

・鍵をキーチェーンで作成し、アップロードする
・鍵の作り方はiOS Developer Programの期限内での更新を参照
_6

・Certificateがダウンロードできるようになるので、ダウンロード、ダブルクリックでキーチェーンに登録
_7

Generateボタンをクリックし、Provisioning Profileを作成する
_8

・ダウンロードし、ダブルクリックするとオーガナイザーにProvisioning Profileが登録される。
_9

更新作業は以上で完了。

iOS Developer Enterprise Program の更新

iOS デバイス向けのエンタープライズ App を配信する.

iOS Developer Program 同様 Enterprise版も 年間使用料があり、更新しないと社内用アプリの起動ができなくなるので、更新しました。
更新手順は Developer Program 同様なので、以前備忘録として書いた suusuke – blog – iOS Developer Programの期限内での更新. の通りの手順で問題なく更新出来ます。

ただ、疑問点?

Distribution Certificate の期限が3年後になっている

iOS デバイス向けのエンタープライズ App を配信する.

一年前に Enterprise に申し込んだ際は証明書(Certificate)の期限も1年間だったんだけど。最近変わったんだろうか?
ドキュメントにも、3年間と書いてある。

配信プロビジョニングプロファイルは、発行後 12 カ月で有効期限が切れます。有効期限の 2 カ月前から、iOS デバイスにもうすぐ期限切れになることについて通知が表示されます。有効期限日以降は、App は起動しなくなります。

….

配信証明書の有効期限が切れると、App は起動しなくなります。配信証明書は、発行後 3 年間、またはエンタープライズ・デベロッパ・プログラム・メンバーシップの有効期限まで有効です(どちらか早い方)。証明書が想定より早く期限切れにならないように、メンバーシップの有効期限が切れる前にメンバーシップを更新してください。配信証明書がどのようにチェックされるかについては、証明書の検証を参照してください。

上記のように、配信証明書は3年間有効でも、プロビジョニングプロファイルは12ヶ月なので、アプリも新しいプロビジョニングプロファイルで、作りなおさないと起動しなくなってしまう。
良くなる点としては、配信証明書を更新する手間がなくなる事位なのかな。。。
チームで開発している場合は、証明書渡したりする手間が無くなり良いのか。

追記

Developer Program の更新との細かい違い

上に書いたとおり基本的には同じだったのですが、Provisioning Profileの更新の際にModifyボタンが無いので、削除して新たに作りなおすようになります。
これは、古い証明書で作成した、Enterprise版のアプリを利用不可にするため、そのような仕様になっているかと思われます。
削除すると

Your Certificate Has Been Revoked

というメールが届きます。

jQueryでXHRを送信するときの覚書(getJSON版)

以前書いた、jQueryでXHRを送信するときの覚書getJSONバージョン

キャッシュが残る

{t: new Date().getTime()} の様に、タイムスタンプをパラメータに渡してキャッシュしないようにする。

$.getJSON('list.php', {t: new Date().getTime()},
    function(data) {
    for (i = 0; i < data.length; i++) {
        //console.log(i);
        ....
    }
});

同期通信したい

$.ajaxSetup({ async: false }); で、同期通信するようにする。
$.ajaxSetup({ async: true }); で、非同期通信するようにする。

$.ajaxSetup({ async: false });
$.getJSON('list.php', {t: new Date().getTime()},
    function(data) {
    for (i = 0; i < data.length; i++) {
        //console.log(i);
        ....
    }
});
$.ajaxSetup({ async: true });

iOS Developer Programの期限内での更新

iOS Developer Programの更新作業をした際の覚書です。

iOS Developer Programのライセンスの有効期間は1年間となっていますので、更新する必要があります。

更新については、Program Renewals – iOS Developer Program – Support – Apple Developer.に詳しく書いてあります。
更新しなかった場合もどうなるか書いてあるので、一度は読んでおくと良いと思います。

なお、期限が切れる前に更新していますので期限が切れた後に更新した場合とは少し異なると思います。

目次

  • ライセンスの購入
  • 証明書(Certificate)の更新
  • Provisioning Profileの更新

ライセンスの購入

  • iOS Dev Center – Apple Developer.にてライセンスを購入します。
  • 更新が近づいていると、ログイン後Updated Program License Agreementとメッセージが表示されているので、Review Agreementのリンクから購入します。 IOS Dev Center  Apple Developer 12 11 13 12 47 3
  • 規約を読んでチェックしI Agreeをクリックします。 Member Center  Apple Developer 12 11 13 12 48
  • iOS Developer ProgramをチェックしてContinueをクリックします。 Apple Developer Program Renewal  Select Program 12 11 13 12 49
  • Continueボタンをクリックします。 Apple Developer Program Renewal  Review Your Purchase Details 12 11 13 12 50
  • Add to cartボタンをクリックします。 Apple Developer Program Renewal  Purchase 12 11 13 12 52
  • Apple Store画面に遷移するのでご購入手続きへボタンから購入します。 カート  Apple Store for Business  Japan 12 11 13 12 52
  • 請求先や支払方法を確認し、注文を確定させます。 Thank You  Apple Store for Business  Japan 12 11 13 12 58 2
  • 5,6時間後にはiOS Developer Program更新完了のメールが届くので、iOS Deve Centerにログインして期限が伸びているか確認できればライセンスの更新は完了です。 Member Center  Apple Developer

証明書(Certificate)の更新

    • キーチェーンアクセスから、証明書(Certificate)の元になる証明書要求を作成します。
      • 証明書アシスタント認証局に証明書を要求…
      • デベロッパー登録時のメールアドレス入力
      • ディスクに保存
      • 鍵ペア情報を指定(鍵のサイズ:2048ビット, アルゴリズム:RSA) 証明書アシスタント 2 証明書アシスタント 3 2
      • CertificateSigningRequest.certSigningRequestをディスクに保存 証明書アシスタント 2
    • iOS Provisioning Portalにログインして、古い証明書(Certificate)をRevokeをクリックして削除します。 Certificates  iOS Provisioning Portal  Apple Developer
    • Request Certificateをクリックして、作成した証明書要求(CertificateSigningRequest.certSigningRequest)をアップロードします。 Certificates  iOS Provisioning Portal  Apple Developer
    • アップロード後画面をリロードするとDownloadボタン、click here to download now.リンクが現れるのでクリックして、証明書(ios_development.cer、AppleWWDRCA.cer)をダウンロードします。 Certificates  iOS Provisioning Portal  Apple Developer 2
    • ダウンロードした2つのファイルをダブルクリックして、キーチェーンアクセスに登録します。(Development、Distributionともにここまでの手順行う)
    • キーチェーンアクセスから古い証明書と鍵を削除する(消しておかないと期限が切れた場合、XCodeでビルドに失敗します。) キーチェーンアクセス 3

Provisioning Profileの更新

    • 再度、iOS Provisioning Portalにログインし古い証明書(Certificete)に紐付いている、Provisioning Profileを更新します。Modifyボタンをクリックして、証明書を新しい物に紐付けます。 Provisioning Profiles  iOS Provisioning Portal  Apple Developer Distribution Provisioning Profiles  iOS Provisioning Portal  Apple Developer
    • Donwloadボタンをクリックして新しいProvisioning Profileをダウンロードして、Organizerに登録するか、OrganizerからRefreshボタンをクリックしてProvisionin Profileを更新します。古いものは削除します(TeamがUnknownのもの) Provisioning Profiles  iOS Provisioning Portal  Apple Developer Organizer  Devices
    • 最後に実機でデバックできれば更新完了です。(OrganizerでRefreshしたタイミングかわからないのですが、キーチェーンアクセスに古い証明書が復活してたのでXCodeで証明書エラーになる場合はそこを確認するといいと思います。)

アプリをiPhone5に対応した際の備忘録

iPhone5が発売されてから随分時間が経ってますが、この度アプリをiPhone5に対応したのでやったことの備忘録を書きたいと思います。

 

縦幅を568pxに変更する

アプリによって対応する箇所はいろいろ有ると思うのですが、共通するのが縦幅を568pxに変更する事だと思います。対応されてないアプリをiPhone5で起動すると上下に余白ができてしまします。

iPhone5/iOS6で、アプリの縦幅を568pxに変更する方法 – たくあん. に記載されている通りに、568pxのスプラッシュ画像(Default-568h@2x.png)を用意してプロジェクトに追加すればiPhone5で起動した場合に568pxで表示されます。

iPhone5対応のスクリーンショットを用意する

これはApp Storeに表示されるものになりますが、iTunes Connectで申請する際に、4-Inch Retina Display ScreenshotsにiPhone5で表示したスクリーンショットをアップロードすればOKです。

ITunes Connect

iPhone5対応のスクリーンショットについて | KAYAC DESIGNER’S BLOG – デザインやマークアップの話.

その他必要な対応

ポートレート、ランドスケープ両方対応しているアプリなど、アプリによってはその他にも対応が必要みたいです。

アプリをiPhone5に対応する場合の地雷ポイント一覧 | fladdict.