セキュリティ

Apache 2.4 で TLS を安全に設定する

概要

本番にはブラウザーが信頼する認証局の証明書を使います。自己署名証明書はローカル開発や検証に限定し、TLS設定はApache 2.4の公式資料に従います。

実施例

sudo a2enmod ssl
sudo apachectl configtest
sudo systemctl reload apache2

# 開発専用の短期自己署名証明書
openssl req -x509 -newkey rsa:4096 -sha256 -nodes -days 30 \
  -keyout dev.key -out dev.crt -subj '/CN=localhost'

注意点

証明書更新、秘密鍵の権限、HTTPからHTTPSへの方針、TLSスキャナーによる定期確認を運用に組み込みます。

参考: 公式ドキュメント

続きを読む

Ubuntu で、Apache2 の SSL を有効にする(オレオレ証明の設定方法)

  1. openssl をインストール
    ==================
sudo apt-get install openssl
  1. 秘密鍵を作る
    ==================

仮に server.key としよう。鍵の長さは 4096 バイト以上にすること。そうでないと最近のブラウザでは暗号が弱くて SSL の接続の段階で拒否られる。

# Do not use 2048 byte key - It does not work on modern browsers.
sudo openssl genrsa -des3 -out server.key 4096

Apache2 を起動するとき秘密鍵のパスワードを毎回聞かれないようにするには以下のようにする

続きを読む

SSH で、リモートのサーバにパスワードなしでログインする方法

  1. まず、ローカルのマシンで ssh-keygen というコマンドを使って公開鍵・秘密鍵のペアを作成する。オプションの -t dsa だが、DSA (Digital Signature Algorithm) の説明はここ
    # ssh-keygen -t dsa
  2. 上のコマンドを実行すると、.ssh というディレクトリに、id_dsa と id_dsa.pub という 2つのファイルができあがる。どちらもテキストファイルで、この 2つが鍵ペアとなる。拡張子 .pub はその名の通り公開鍵(public key)だから、こちらの方をリモートのサーバに転送する。
    転送の仕方は、 # ssh-copy-id remote_username@remote_host.com または、 # ssh-copy-id -i ~/.ssh/id_dsa.pub remote_username@remote_host.com
続きを読む

Perl で、ssh でリモートのサーバにアクセスしてファイルをアップロード(SCP)する方法 (Net::SSH2)

バックアップのためにリモートのサーバにファイルをコピー(アップロード)したい。

そんな欲求が私の中に生まれた。Linux ではファイルを ssh でコピーするのに scp というコマンドがあるので、早速試してみたのは Net::SCP という Perl のモジュールなのだが、なぜかこのモジュールのメソッドにはパスワードを指定するものがない。ホスト名とユーザー名しか指定しないのだ。ではパスワードはどこにいった?

続きを読む

Fedora Core 6 で、パッケージマネージャで追加した phpMyAdmin を使う。

Fedora Core 6 のパッケージマネージャで phpMyAdmin を追加しても、localhost からしかアクセスできないので注意する。以下は必要情報。

  • phpMyAdmin がインストールされるディレクトリ: /usr/share/phpMyAdmin
  • アクセス URL: https://127.0.0.1/phpMyAdmin/
  • パスワード: MySQL のユーザー名とパスワード
  • localhost 以外からアクセスできるようにしたいときは、phpMyAdmin.conf の セクションを以下のように修正する。 order deny,allow # deny from all ←コメントアウト # allow from 127.0.0.1 ←コメントアウト allow from all # ←すべてのマシンからアクセス可能にしてしまえ!
続きを読む

Apache 2.0 で、cgi-bin ディレクトリ以外で index.cgi を有効にする方法

https://yourdomain.com/ にアクセスしたときに、実際は https://yourdomain.com/index.cgi でアクセスさせるためには、どうしたらいいだろう? Fedora Core 6 だと、/etc/httpd/conf/httpd.conf という設定ファイルの中で、 AllowOverride というオプションが NONE になっているから、/var/www/html 配下に置いた .htaccess がデフォルトだとすべて無効になっているのである。

…というわけで、まずは /etc/httpd/conf/httpd.conf の中で、 AllowOverride というオプションが NONE になっている箇所を探して( セクションの中)、AllowOverride All にした上で、以下のように /var/www/html/.htaccess を設定すればよい。

続きを読む

OpenSSL で、秘密鍵と公開鍵が入ったファイルから公開鍵だけ取り出す方法

OpenSSL で CA.sh や CA.pl を使って自分で認証局を立てて自己署名した証明書を発行すると、証明書と秘密鍵が一緒に入った以下のようなファイルが作られる。ファイル名が同じであれば、拡張子つまりファイルフォーマットが違うだけでどれも内容は同じだ。

(クライアント)

  • cert-clt.pem
  • cert-clt.der
  • cert-clt.p12

(サーバ)

  • cert-srv.pem
  • cert-srv.der
  • cert-srv.p12

(認証局)

  • root.pem
  • root.der
  • root.p12

ここで、秘密鍵と公開鍵が入った cert-srv.pem のファイルから公開鍵だけ取り出すには、以下のコマンドを実行ればよい。

openssl rsa -pubout -outform PEM -in cert-srv.pem -out public-srv.pem

実行するとパスフレーズを聞いてくるので、秘密鍵のパスフレーズを入力する。すると、新規に public-srv.pem ファイルが作成されて cert-srv.pem に入っていた公開鍵だけが出力される。

続きを読む

PHP で、ダイジェスト認証(Digest Auth)をする HTTP クライアント

PHP で、ダイジェスト認証(RFC2617)付きのサイトにアクセスするにはどうしたらいいのだろう?

まずは PHP で、Perl でいうところの LWP::UserAgent に相当するものはないのだろうか?と探していたところ、あった。CURL というのがそれで、libcurl パッケージをインストールしておく必要があるとのこと。私は、Fedora Core 6 を使っているのだが、Fedora Core 6 をインストールしたときに開発パッケージをなんでもかんでも入れておいたので特に何もする必要はなかった(苦笑)。

とにかくまずは CURL が PHP で動けば、あとはプロトコルとして HTTP、HTTPS(SSL/TLS)、FTP、Telnet、LDAP プロトコルでアクセスするクライアントを作れるようだ。

続きを読む

Perl で、BASIC 認証(基本認証)付きのサイトにアクセスするには?

LWP::UserAgent を使うのだが、以下のコードで太字の行がポイント。

使用するモジュール

use LWP::UserAgent;

コード

#!/usr/bin/perl use LWP::UserAgent; our $HOME_URL = 'ユーザー名とパスワード付きの URL'; our $USERNAME = '上記 URL にアクセスするためのユーザー名'; our $PASSWORD = '上記 URL にアクセスするためのパスワード'; $ua = LWP::UserAgent->new; $req = HTTP::Request->new(GET => $HOME_URL); $req->authorization_basic($USERNAME, $PASSWORD); print $ua->request($req)->as_string; 1;
続きを読む
セキュリティ を購読