とりあえずメモ
R=255(1-(C(1-K)+K))
G=255(1-(M(1-K)+K))
B=255(1-(Y(1-K)+K))
とりあえずメモ
R=255(1-(C(1-K)+K))
G=255(1-(M(1-K)+K))
B=255(1-(Y(1-K)+K))
MacOSXServer(10.3 Panther)でSSLを使う必要ができたので、設定してみる。情報源は Using mod_ssl on MacOSX をベースにしているけど、若干変えている部分もある。
1)乱数データの作成
mkdir -p /tmp/keygen
cd /
openssl md5 * > /tmp/keygen/rand.dat
2)秘密鍵の作成
cd /tmp/keygen
openssl genrsa -des3 -out server.key -rand rand.dat 1024
同じパスフレーズを2回入れる。ここでできたserver.keyが秘密鍵となる。当然だが、ここで入れたパスフレーズを忘れないように。rand.datはこの後の4)で使ってもいいが、同じ乱数データを投入することに意味がないので削除。
3)CSR (Certificate Signing Request)の作成
openssl req -new -key server.key -out server.csr
2)で指定したパスフレーズを入力すると、CSRを作成するための情報を聞いてくるので質問に答えていく。
Country Name (2 letter code) [AU]: JP
State or Province Name (full name) [Some-State]: Kanagawa
Locality Name (eg, city) []: Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]: HOGEHOGE Co.,LTD.
Organizational Unit Name (eg, section) []: SYSTEM ADMINISTRATOR DIVISION
Common Name (eg, YOUR name) []: www.example.com
Email Address []: (your e-mail address)postmaster@example.com
VeriSignなどの正式なCAに提出する場合は、当然であるが正しく記入すること。
4)CA用秘密鍵の作成
3)で作成したCSRをCAに署名してもらう必要があるが、今回はテスト用なので自分がCAとなってCSRに署名する。正式なCAによる署名じゃないのでブラウザから警告が出るが、あくまでもテストということで無視しておく。
openssl genrsa -des3 -out ca.key 1024
ここでも2)と同じようにパスフレーズを聞かれるので、CA用のパスフレーズを入れる。当然、このパスフレーズを忘れないこと。これでCAとしての秘密鍵ができる。
5)CA用証明書の作成
4)で作成したCA用の秘密鍵でCA用証明書を作成する。
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
CA用パスフレーズを入力すると、CAとしての情報を聞いてくるので入力する。
6)CSRに署名する
この時点で、/tmp/keygenディレクトリにはserver.key,server.csr,ca.key,ca.crtの4ファイルができていることを確認する。いよいよCSRに自己署名をするのだが、一番簡単にすませるためにmod_sslのソースに含まれるsign.shというスクリプトを実行する。sign.shのみを取り出してコピーする。
chmod +x sign.sh
./sign.sh server.csr
この時に「Sign the certificate?」と「1 out of 1 certificate requests certified, commit?」と聞かれるので、y[ENTER]と答える。これで署名が完了。
7)作成した証明書のコピー
作成した証明書をapacheの設定フォルダにコピーする。OSXServerにインストールされているapacheの設定フォルダは/etc/httpd/なので、ここのssl.keyフォルダにコピーする。必要なファイルserver.key,server.crtの2つ。7)以降の作業はrootに移行するかsudoでコマンドを実行する必要がある。
8)server.keyのパスフレーズをなくす
この作業をしておかないと、apache起動時にパスフレーズの入力待ちとなってしまうため、apache再起動時に問題となる。
cd /etc/httpd/ssl.key
mv server.key server.key.original
openssl rsa -in server.key.original -out server.key
パスフレーズを聞いてくるので、入力する。「writing RSA key」のメッセージが出ればOK。
9)httpd.confの編集
apacheの設定ファイルhttpd.confを編集する。その前にapacheを停止しておく。
apachectl stop
設定ファイルを書き換える前に、念のためバックアップをとっておくほうがよい。
cd /etc/httpd/
cp httpd.conf httpd.conf.backup
バックアップをとったら、httpd.confを書き換える。書き換えるのは、
1.Port 80 -> #Port 80
2.#LoadModule ssl_module -> LoadModule ssl_module
3.#AddModule mod_ssl.c -> AddModule mod_ssl.c
4.ServerName の項目をServerName [3)で設定したcommonname]にする
5.<IfModule mod_ssl.c>の項目を上記情報源を参考に書き換える。このサーバのIPアドレスを192.168.0.100と仮定。
<IfModule mod_ssl.c>
# Some MIME-types for downloading Certificates and CRLs
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
# inintial Directives for SSL
SSLProtocol all -SSLv3
SSLPassPhraseDialog builtin
SSLSessionCache dbm:/var/run/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex file:/var/run/ssl_mutex
SSLRandomSeed startup builtin
SSLLog /var/log/httpd/ssl_engine_log
SSLLogLevel info
Listen 80
Listen 443
##
## SSL Virtual Host Context
##
<VirtualHost 192.168.0.100:80>
#Just to keep things sane...
DocumentRoot "/Library/WebServer/Documents"
ServerName www.example.com
ServerAdmin admin@example.com
SSLEngine off
</VirtualHost>
<VirtualHost 192.168.0.100:443>
# General setup for the virtual host
DocumentRoot "/Library/WebServer/Documents"
#ServerName has to match the server you entered into the CSR
ServerName www.example.com
ServerAdmin admin@example.com
ErrorLog /var/log/httpd/error_log
TransferLog /var/log/httpd/access_log
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
SSLProtocol all -SSLv3
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# Path to your certificates and private key
SSLCertificateFile /etc/httpd/ssl.key/server.crt
SSLCertificateKeyFile /etc/httpd/ssl.key/server.key
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/Library/WebServer/CGI-Executables">
SSLOptions +StdEnvVars
</Directory>
# correction for browsers that don't always handle SSL connections well
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# Per-Server Logging:
# The home of a custom SSL log file. Use this when you want a
# compact non-error SSL logfile on a virtual host basis.
CustomLog /var/log/httpd/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
</IfModule>
終わったら保存する。
10)httpd.confのチェックとapacheの起動
apachectl configtest
でhttpd.confのチェックを行う。「Syntax OK」であれば、
apachectl start
でapacheを起動する。
とここまでの話で動くはずなのだが、MacOSXServerでは動かない場合がある。
lsof -i:80
でポート80を使っているプログラムが「webperfca」になっていると動かない。これは"Mac OS X Server Web Performance Cache daemon"(man Webprefcacheで調べられます)がポート80を使っているためにapacheが起動できないため。Webprefcacheを停止してからapacheを起動したら正常に動く。