Apelog

ApacheでSSL(mod_ssl)を使用する場合の一連の流れ。

署名入り証明書の取得(購入)から設定までの一連の流れのまとめです。

自己署名証明書での解説ページが多いので、初めて証明書を購入してSSLの導入をする場合を想定して書いています。

サーバー環境はCentOS 5.1。環境が変わっても一連の流れと作業はほぼ同じです。

SSLで暗号化された通信の簡単な説明

  1. サイトにアクセスするとサーバーから証明書と鍵(A)を受信
  2. 証明書が安全な場合、鍵(A)を利用して通信データを暗号化
  3. 暗号化したデータをサーバーに送信
  4. サーバーは鍵(A)に対応した鍵(B)でデータを復元

上記の「証明書が安全な場合」の安全かどうかはどうやって判別すればいいのか?

証明書の安全を保証する為に認証局と呼ばれる第3者によって証明書に署名を付けてもらいます。その署名が無いものは安全性が確認出来ない為、オレオレ証明書などと呼ばれています。

署名付き証明書を手に入れるには

署名付き証明書を取得する為に証明書署名リクエスト(CSR: Certificate Signing Request)と呼ばれるものが必要になります。CSRには証明書の保有者の情報(名前・有効期限・FQDNなど)が含まれており、それを認証局に送り保有者情報の確認がおこなわれた後に署名付き証明書が手に入ります。

CSRの作成

CSRはOpenSSLのコマンドによる作成が一般的です(一部Webインターフェイスを提供しているところもあります)。

ここではコマンドラインによる作成を以下に挙げます。

# cd /etc/pki/tls/certs/
# openssl req -new -nodes -keyout myserver.key -out server.csr

上記コマンドを実行するとCSR作成の為に必要な情報の入力待ち状態になるので、情報を入力します。特別な理由が無ければWhoisの情報と同じものを入れた方がいいです。違う場合、署名してもらえない場合や人力確認で時間が掛かる事が多いです。()内はコメントです。

Generating a 1024 bit RSA private key
.++++++
......++++++
writing new private key to 'myserver.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP(国)
State or Province Name (full name) [Berkshire]:Tokyo(都道府県)
Locality Name (eg, city) [Newbury]:Shinjuku(市区町村)
Organization Name (eg, company) [My Company Ltd]:apecell(組織名)
Organizational Unit Name (eg, section) []:IT(部署名・グループ名)
Common Name (eg, your name or your server's hostname) []:apecell.com(サーバーホスト名)
Email Address []:info@apecell.com(管理メールアドレス) ※1

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(パスワード) ※1 ※2
An optional company name []:(組織名略称) ※1

※1 - 認証局によって空白指定がされているので、申請する認証局のサイトなどで要確認。
※2 - 入力するとApache起動時にパスワードが必要。SSLを失効させたりする場合などにも使用。

上記のコマンドを実行するとCSR(server.csr)と秘密鍵(myserver.key)の2種類のファイルが作成されます。

署名付き証明書の取得

認証局のサイトで申込を行い証明書を発行してもらいます。

基本的に1ホスト名1証明書ですが用途によりサブドメイン全てをカバーしたワイルドカード証明書など、各社のサービスと値段は様々です。

特に携帯と負荷分散環境でのSSLについて詳しくは以下のサイトが参考になります。
携帯対応、負荷分散環境で最適な、SSL証明書選び:Goodpic

発行までの手順も各社に違いがあり、郵送で書面記入が必要なものからWhoisに登録されているメールアドレスに確認メールが送信されるだけというものまであり、発行まで即日〜2週間程度になります。

Apacheの設定

証明書を取得したら /etc/pki/tls/certs/server.crt に保存しておきます。

# yum -y install mod_ssl
# vi /etc/httpd/conf.d/ssl.conf

Edit >>
SSLCertificateFile /etc/pki/tls/certs/server.crt (証明書指定)
SSLCertificateKeyFile /etc/pki/tls/certs/server.key (秘密鍵指定)
<< Edit

# /etc/rc.d/init.d/httpd restart

以上が一般的に言われる「SSLを買って設定する」になります。

Web開発では複数ユーザーでディレクトリを共有管理したいケースが良くある、そういった場合の設定方法。

/var/www/htmlfoo, bar, apacheの3ユーザーで管理するとする、設定環境はCentOS5。

設定方法

管理用グループ(webadmin)を作成

# /usr/sbin/groupadd webadmin

管理用グループ(webadmin)に3ユーザー追加。追加時に他のグループにも所属させる場合は同時に指定する事。特にwheelユーザーからしかrootになれない状態で間違ってwheelから外してしまうと悲惨な事に。

# /usr/sbin/usermod -G webadmin foo
# /usr/sbin/usermod -G webadmin bar
# /usr/sbin/usermod -G webadmin,apache apache

対象ディレクトリをwebadminが操作できるようにグループを指定し書き込み権限を与える。

# chgrp webadmin /var/www/html
# chmod g+w /var/www/html

このままだとファイルを生成した際に所有権がそれぞれのユーザーになってしまうので、グループ権限でファイルを作成するようにする。

# chmod g+s /var/www/html

以上でグループで管理出来る環境になる。

複数設定する場合はfindでディレクトリだけ検索した結果に対して変更すると楽。

find . -type d -print | xargs chmod g+w

Ruby製のプロジェクト管理ソフトウェアRedmineのインストール手順。

Redmineの特徴

  • Ruby(Rails) + (MySQL | PostgreSQL | SQLite)
  • 複数プロジェクト管理
  • プロジェクト毎のWiki、リポジトリ、フォーラムなど
  • ユーザー認証、マイページ

など。

よくTracと比較され、Tracはプラグインで拡張しないと使いにくいと言われている、個人的にもデフォルトだとRedmineの方が圧倒的に使いやすかった。

インストール環境

  • CentOS 5
  • Ruby 1.8.5
  • RubyGems 1.1.0
  • Ruby on Rails 2.0.2
  • Mongrel 1.1.4
  • MySQL 5.0.22
  • Redmine Rev:1319

インストール手順

パッケージ管理で必要なものをインストール(Rootで作業)

$ yum install -y ruby rdoc ruby-devel mysql-server

Ruby用パッケージ管理RubyGrmsをインストール。最新版はここから確認

$ wget wget http://rubyforge.org/frs/download.php/34638/rubygems-1.1.0.tgz
$ tar -zxvf rubygems-1.1.0.tgz
$ ruby rubygems-1.1.0/setup.rb
$ rm -Rf rubygems-1.1.0*

Ruby on Railsインストール

$ gem install rails --include-dependencies

Mongrelインストール

$ gem install mongrel

MySQLにデータベースを用意

$ mysql -u root
> create database redmine;

インストールディレクトリを準備

$ mkdir -p /home/redmine

Redmineインストール from SVN

$ cd /home/redmine
$ svn checkout http://redmine.rubyforge.org/svn/trunk/ .

DBコンフィグを編集

$ cp config/database.yml.example config/database.yml

$ vi config/database.yml

# デフォルトだとsocketの場所が違うので合わせて指定する
# [production]のにsocket項目を追加

production:
adapter: mysql
database: redmine
host: localhost
username: root
password:
socket: /var/lib/mysql/mysql.sock

メールコンフィグを編集

$ vi config/environment.rb

# メール機能を使用する場合(SMTP)
# SMTP server configurationの項目を使用するSMTPサーバーの情報に変更

# 使用しない場合
config.action_mailer.perform_deliveries = false

データベースに初期データをセットアップ

$ rake db:migrate RAILS_ENV="production"

使用言語を登録

$ rake load_default_data RAILS_ENV="production"
> ja

Mongrel起動

mongrel_rails start -d -e production

# デフォルトで3000番ポートで起動
# 変更する場合は -p 8080 の様に -p オプションで指定

確認

設置したサーバーの3000番ポート(http://yourdomain:3000/)へアクセス

Apacheとの連携

今回は必要無かったのでそのまま動かせている。

ReverseProxyやSCGIを利用した方法があるらしいのでSSL使いたいとかでApacheにした場合は別途書きます。

SELinux無効化

CentOSでSELinuxを無効化するメモ

# getenforce // 確認
Enforcing #有効

# setenforce 0 // 無効化

# getenforce // 確認
Permissive // 無効

// 起動時に無効化
# vi /etc/sysconfig/selinux
SELINUX=enforcing
↓
SELINUX=disabled

Windows Installer形式でUbuntu(jp)をインストールでき自動的にデュアルブート環境にしてくれるWubiにてインストールしてみた。

最終的な目的はWindowsXPとUbuntuのデュアルブート環境構築、Ubuntu日本語環境、3Dデスクトップの導入

Wubiの原理はVMのようにNTFS上に大きなファイルを作りそれを使用する。メリットは手軽、Windowsドライブのマウントが楽。デメリットはNative Ubuntuに比べると若干遅い、パーティション切れない。速度的面は以下のスペックでは全く問題無し。Native Ubuntuが何とか動くスペックでは厳しいらしい。

  • CPU: AMD Turion(tm) 64 X2 Mobile Technology TL-50 (1.6GHz)
  • メモリ: 2G
  • HDD: 80G (Ubuntu割り当て15G)
  • グラフィック: ATI Radeon Xpress 1100

OSの環境は以下。

  • WindowsXP SP2
  • Ubuntu 7.10

WindowsからUbuntuをインストール

WubiのBetaはUbuntu7.04用なので7.10をインストールするためにWubi/develから最新のものを使う。今回使用したものはWubi-7.10-alpha-rev386。

起動させれば自動的にCDイメージのダウンロードが始まる。ダウンロードは遅い場合が多いので、先にダウンロードしておいても可。その場合はWubiと同一ディレクトリにisoを置けば良いらしい(未確認)、DaemonToolで仮想CDとしてマウントすればそこから読んでくる。ローカライズ版isoだと途中でインストールが止まったのでダウンロードするisoはWubiが落としてくるものを推奨。インストール言語は日本語。

用意が出来て再起動すれば、WindowsとUbuntuの起動選択画面になるのでUbuntu-linuxを選択。あとは自動的にインストールが進んで再起動するので、もう一度Ubuntu起動させればログインできる。インストールはこれで完了。インストール後は日本語入力が出来いが無視(SCIM未起動)。

Ubuntuを日本語環境に

[システム]→[設定]→[キーボード]→[レイアウト]で使用するキーボードの型式を選択。レイアウトにJapanを追加しデフォルトに設定。

Ubuntuの日本語ローカライズ版であるubuntu-desktop-jaを入れる。
Japanese Teamによる追加パッケージの利用方法

$ sudo vi /etc/apt/sources.list

以下2行を追加

deb http://archive.ubuntulinux.jp/ubuntu-ja gutsy/
deb http://archive.ubuntulinux.jp/ubuntu-ja gutsy-ja/
$ sudo apt-get update
$ sudo apt-get install ubuntu-ja-keyring
$ sudo apt-get update

上記だけだと色々パッケージが見付からないと言われるので、とりあえずリポジトリのコメントアウトを除去する。

$ sudo vi /etc/apt/sources.list

#deb http://jp.archive.ubuntu.com/...
↓
deb http://jp.archive.ubuntu.com/...

#deb-src http://jp.archive.ubuntu.com/...
↓
deb-src http://jp.archive.ubuntu.com/...

ローカライズパッケージインストール

$ sudo apt-get update
$ sudo apt-get install ubuntu-desktop-ja

[システム]→[設定]→[SCIM入力メソッド設定]→[全体設定]のキーボード配列を「日本語」に変更。

再起動後、日本語入力出来る事を確認(Shift-Spaceで切替)、出来なければSCIMが立ち上がってないので端末から起動させて確認する(自動起動は後で設定)。

$ scim

これで日本語環境の設定は完了。必要なら[システム]→[システム管理]→[アップデート・マネージャ]でアップデートしておく。

2007-11-25 22:45追記GUIでファイル名変更時にキー入力を受け付けないので、以下の方法で入力方法を変更。

  1. ファイルクリック → F2
  2. 名前欄右クリック
  3. 入力メソッド → SCIM Input Methodを選択

3Dデスクトップ環境「Compiz Fusion」を設定

Ubuntu 7.10 Gusty には標準で Compiz Fusion が入ってるので Beryl はいりません。Compiz Fusionってのは Compiz に Beryl を統合させたものだそうなので。

Ubuntu 7.10 Gusty の Compiz Fusion で 3Dデスクトップ

上記引用元の解説の通り[システム] → [システム管理] → [制限つきドライバの管理] → [ATIの高性能グラフィックドライバ]→有効にするでドライバを入れる。リポジトリのコメントアウトを元に戻しておくとパッケージが見付からないと言われたので解除しておく。

設定変更用パッケージを入れる

$ sudo apt-get install compizconfig-settings-manager emerald

[システム] → [設定] → [外観の設定] → [視覚効果] → [設定変更]で必要に応じた設定に変更。

ここで「The Composite extension is not available」というエラーが出たので、以下をインストール後再起動で解決。

$ sudo apt-get install xserver-xgl

Ubuntu日本語フォーラム / The Composite extension is not availableとでてしまいます。

SCIM自動起動

ローカライズパッケージインストール時にSCIMが自動起動するようになっていたはずが、Compiz Fusion動かすと何故か無効になっていた。

[システム] → [設定] → [セッション]→[自動起動するプログラムから追加をクリックし、名前・コマンドに「scim」、説明に「input method」と入力し追加。

再起動し立ち上がっている事を確認。

日本語入力ONにするとなにかとクラッシュ問題

[システム]→[設定]→[SCIM入力メソッド設定]→[全体設定]の「全てのアプリケーションで同一入力メソッドを使用」のチェックを外すか、$GTK_IM_MODULEをscim-bridgeに変更する。

$ export GTK_IM_MODULE=scim-bridge
$ echo $GTK_IM_MODULE
scim-bridge

Ubuntu日本語フォーラム / Firefox クラッシュ on 7.10

これで当初の目的は完了。今のところ問題なく使用できているのでしばらく様子見。