Apache Https And Openssl

@itのLinux Tipsカラムで北浦氏の「ApacheでSSLを使うには」を拝読致しました。
試したところ、いくつまだはっきりではないところがあります。
自分の体験と試行錯誤を含めて追記いたします。

簡単にまとめると、下記のコマンドで、apacheのSSLを作成することができます。

openssl genrsa -rand /var/log/maillog -out ca.key 1024
openssl req -new -key ca.key -out ca.csr
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

openssl genrsa -rand /var/log/maillog -out server.key 1024
openssl req -new -key server.key -out server.csr
echo 01 > ca.srl
openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -in server.csr -out server.crt -set_serial 01

もしく下記の方法を掲載する記事もあります。

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt -set_serial 01

しかし、いろいろと試しましたが、「Peer's certificate has an invalid signature.」と「sec_error_reused_issuer_and_serial」のエラーが発生したため、うまくいきませんでした。

結局別の記事に掲載されているsha1の暗号化で解決しました。

openssl req -new -x509 -days 365 -sha1 \
-newkey rsa:1024 -nodes -keyout server.key -out server.crt \
-subj "/O=CompanyXYZ/OU=PS/CN=yourserver.companyxyz.com" \
-set_serial 01

これでapacheの起動とfirefoxでのアクセスはスムーズに行きました。


ApacheでSSLを使うには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/702apachessl.html

北浦訓行
2005/2/17

 ここでは、LAN内など特定のユーザー向けにWebサーバを公開することを前提に、SSLを使用する方法を説明する(注)。なお、以下の説明はFedora Core 3を前提としている。

注:外部向けのWebサーバでSSLを使用する場合、信頼できる証明書発行機関(CA)から認証されたサーバ証明書の使用をお勧めする。
 SSLは、Apacheのパッケージ(例えばhttpd-2.0.52-3.1)と同じバージョンのmod_sslモジュール(同mod_ssl-2.0.52-3.1)が必要となる。mod_sslをインストールすると、/etc/httpd/conf.d/ssl.confという設定ファイルが生成される。このファイルは、デフォルト状態でも必要な設定がひととおり行われているため、特に変更する必要はない。なお、デフォルトでは、サーバ証明書は/etc/httpd/conf/ssl.crt/server.crtに、サーバ用の秘密鍵は/etc/httpd/conf/ssl.key/server.keyになっている。

  • SSLを使用するには、まずCAの秘密鍵を作成する。rootで以下のコマンドを実行する。
# openssl genrsa -rand /var/log/maillog -out ca.key 1024

ログ

161380 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
......++++++
.++++++
e is 65537 (0x10001)

-randオプションは、ランダムデータの基となるファイルを適当に指定する。これにより、RSA方式で1024bitの秘密鍵(ca.key)が作成される。

  • 次に、ca.keyからCA証明書の署名要求(CSR)を作成する。ここで対話的に入力した国名などの情報は、発行される証明書に表示される。
# openssl req -new -key ca.key -out ca.csr

ログ

(省略)
-----
Country Name (2 letter code) [GB]:JP ←2文字国名(JP)
State or Province Name (full name) [Berkshire]:Tokyo ←都道府県
Locality Name (eg, city) [Newbury]:Chiyoda ←区市町村
Organization Name (eg, company) [My Company Ltd]:Example Corp. ←組織名
Organizational Unit Name (eg, section) []:Example Dept. ←部署名
Common Name (eg, your name or your server's hostname) []:Noriyuki
 Kitaura ←担当者名またはサーバ名など
Email Address []:kitaura@example.co.jp ←メールアドレス

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←[Enter]キー
An optional company name []: ←[Enter]キー
  • 続いて、CA証明書に署名して発行する。ここでは指定していないが、-daysオプションにより、証明書の有効期限を設定することも可能だ。例えば、「-days 365」とすると1年間有効の証明書が発行される。
# openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

ログ

Signature ok
subject=/C=JP/ST=Tokyo/L=Chiyoda/O=Example Corp./OU=Example Dept./CN=Noriyuki Kitaura/emailAddress=kitaura@example.co.jp
Getting Private key
  • 以降はサーバ用の証明書を作成する作業になる。最初に、サーバ用の秘密鍵を作成する。
# openssl genrsa -rand /var/log/maillog -out server.key 1024

ログ

5974 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
...........++++++
........................................................++++++
e is 65537 (0x10001)
  • サーバ用の秘密鍵からサーバ証明書のCSRを作成する。CA証明書のCSRと同様に、各種情報を対話的に入力する。Common Nameにはサーバのホスト名を入力する。
# openssl req -new -key server.key -out server.csr

ログ

(省略)
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:Chiyoda
Organization Name (eg, company) [My Company Ltd]:Example Corp.
Organizational Unit Name (eg, section) []:Example Dept.
Common Name (eg, your name or your server's hostname) []:www.example
.jp ←ホスト名
Email Address []:webmaster@example.jp

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
  • サーバ用の証明書に署名して発行する前に、認証局が使用するシリアルナンバーのファイルを作成しておく必要がある。
# echo 01 > ca.srl
  • 準備ができたので、証明書を発行する。ここでは、「-days 365」として1年間有効の証明書を発行している。
# openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -in server.csr -out server.crt

ログ

Signature ok
subject=/C=JP/ST=Tokyo/L=Chiyoda/O=Example Corp./OU=Example Dept./CN=example.jp/emailAddress=webmaster@example.jp
Getting CA Private Key
  • 作成したserver.crtとserver.keyを以下のようにコピーする。
# cp server.crt /etc/httpd/conf/ssl.crt
# cp server.key /etc/httpd/conf/ssl.key
  • 設定が完了したら、Apacheを再起動する。
# service httpd restart