2011年11月11日金曜日

設定されたSSL鍵にパスフレーズが設定されているかどうか

どうも、俺@アプリ開発中です。
今日は、利用しているSSLの鍵にパスフレーズが設定されているかどうかを調べる方法についてめもめも。

例えば、apacheを再起動しなければならなくなった場合
そのapacheはSSL設定がされており、https:// なWEBサーバであると、再起動かけたとき

# /usr/local/apache2/bin/apachectl restart
Enter pass phrase for /path/to/ssl.key: 
のようにパスフレーズを求められて、
apacheが停止したところで止まってしまい、起動出来なくなってしまいます。これはエライコッチャ!

こんな場合は、事前にSSL鍵にパスフレーズが設定されているかどうかチェックしておきましょう。
まず、apacheのSSL設定ファイル(通常はhttpd-ssl.confかな)にあるSSLCertificateKeyFileを見て、SSL鍵パスを確認します。

# cat /usr/local/apache2/conf/extra/httpd-ssl.conf | grep SSLCertificateKeyFile
SSLCertificateKeyFile "/usr/local/apache2/conf/ssl/ssl.key"
例えばこのように出力されて、鍵ファイルのパスがわかります。

このファイルを openssl コマンドでパスフレーズ設定されているかどうか確認します。
# openssl rsa -in /usr/local/apache2/conf/ssl/ssl.key
とコマンドを打って
・パスフレーズ設定されている場合
Enter pass phrase for /usr/local/apache2/conf/ssl/ssl.key:
これは要注意です!

・パスフレーズ設定されていない場合
Writing RSA key
----- BEGIN RSA PRIVATE KEY -----
LKDFopa99yjkfslkKgudkdf...
のように鍵ファイルを表示できれば設定されていません!


これで、apache再起動時に焦ることもなくなりますね。
僕は、開発環境でパスフレーズ設定されたapacheを再起動してしまい、「あれぇ」となった事があります。

ちなみにパスフレーズ設定されたSSL証明書鍵のパスフレーズを解除してしまう方法ですが、(セキュリティ的に危ないので本番サーバとかでは要検討!)

// バックアップを取る
# cp ssl.key ssl.key.bak

// パスフレーズ解除
# openssl rsa -in ssl.key -out new_ssl.key
Enter pass phrase for ssl.key: // ここでパスフレーズを入力
です。
new_ssl.keyというパスフレーズの設定されていないSSL証明書鍵が出来ました。


以上でぇぇぇぇす。

2011年11月10日木曜日

UIView UILayout UITextViewを角丸にする

どうも、俺@アプリ開発中です。
今日はタイトル通り「UIView」「UILayout」「UITextView」の角を丸く描画する方法についてめもめもです。

まず、ヘッダファイルで

#import <QuartzCore/QuartzCore.h>
とQuartzCore.frameworkをインポートします。
別のサイトとかではQuartzCore.frameworkを追加して、とかあるのですが僕の環境ではそんなことしなくても普通に使えました。
なぜだ。(XCode4.2)
次に対象のオブジェクトに対し

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 100, 50, 50);
[btn setTitle:@"test" forState:UIControlStateNormal];

// 角丸の処理
[[btn layer] setCornerRadius:5.0f];

// または
// btn.layer.cornerRadius = 5.0f;
こんな感じです。
UILayoutやUITextViewでも同様に作れます。


以上でぇぇぇえす。

2011年11月9日水曜日

Objective-Cでprivateメソッドを定義したい

どうも、俺です。
ようやくobjective-c(cocoa)な話題です。

objective-cで自作クラスを作り、javaやphpのようにprivateなメソッドを定義したい!という時のめもめもです。
objective-cは基本的には定義されたメソッドはpublicになってしまいます。
面倒なのであえてprivateなメソッドにする必要もなさそうですが。

ちなみにprivateなプロパティは

// MyClass.h
@interface MyClass: NSObject
{
 @private
   id hoge;
}
-(void)methodA;
@end
のような形で定義できちゃいます。

privateなメソッドを定義するには、カテゴリを使って何とか実装できます。、、なので面倒です。

// MyClass.m
@interface MyClass () // ←が無名カテゴリの定義
-(void) privateMethod;
@end

@implemention MyClass
// ここにクラスの実装を行う。
// privateMethodもここに作成する。
-(void) prrivateMethod
{
  // メソッドの内容
}
@end
こんな感じです。
MyClasss.hに変更を食わえる必要はありません。

Objective-Cにprivateメソッドの仕組みが組み込まれてないんでしょうね。
なんか冗長な気がするので、どうしてもprivateじゃないとアカン!という場合でなければ使わなくても良いかなと思いました。
アプリ開発とかでもあまり大規模開発になることもなさそうですし。

以上でぇぇぇぇぇぇぇす。

2011年11月2日水曜日

macのターミナルでvimのdeleteがおかしい時

どうも、俺です。
お久しぶりです。ブログに書くようなネタがなかったのでしばらく更新できませんでした。。

今日はmacを使っててターミナルからvimを開いてdeleteキーを押すと「^?」が出る人へ、対処法メモです。


$ vim ~/.vimrc
-------------------
" 以下を追加
noremap! ^? ^H
とりあえず、.vimrcをこのようにすれば直ります!直るはずです。
^?はCtrl+vを押したあとdeleteキー。
^HはCtrl+vを押した後Ctrl+hキー。

最近はmacで仕事しております。iphoneアプリ開発とかしてるので、そのうちObjective-C関連のネタも書くようになれればいいなー。

以上でぇぇえぇす。

2011年9月13日火曜日

fsockopenでhttps://へ接続したいとき

どうも、久しぶりです。俺@残業中です。

今日はphpのfsockeopen()の使い方注意をメモメモ。
httpsな外部サイトへfsockopen()したいときは

fsockopen('www.example.com', 443, $errono, $errstr, $timeout);
では接続できません。
サーバ側から

<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>

<html><head><title>400 Bad Request</title></head><body><h1>Bad Request</h1><p>Your browser sent a request that this server could not understand.<br />
Reason: You’re speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
とかで帰ってきます。
fsockopen()でhttps://なサイトへ接続するときは

fsockopen('ssl://www.example.com', 443, $errno, $errstr, $timeout);
としましょう。

あ、ちなみにphpはopensslが利用可能な環境でインストールされている必要がありますよ。

 ./configure --with-openssl


以上でぇぇえっぇす。