CentOS5.8のrpm版 Apache(2.2.3-65) でSSLを使う方法です。
まず、opensslとmod_sslが入っているか確認します。
# rpm -aq | grep openssl openssl-0.9.8e-22.el5_8.4 openssl-devel-0.9.8e-22.el5_8.4 openssl-0.9.8e-22.el5_8.4 openssl-devel-0.9.8e-22.el5_8.4 # rpm -aq | grep mod_ssl
mod_sslが入ってませんでした。以下コマンドでインストールします。
# yum install mod_ssl
一応centosで最初からApacheを入れていると、localhost.localdomainというオレオレ証明書が入っていますが、自身のドメイン用の証明書を作り直すことにします。 (SHA1の証明書は排除されつつあるので、SHA2で作成します)
秘密鍵の作成
opensslを使って、server.keyという秘密鍵を作成します。
# mkdir /etc/httpd/conf/ssl.key # cd /etc/httpd/conf/ssl.key # openssl genrsa -des3 -out server.key 2048 Generating RSA private key, 2048 bit long modulus ...........................................................................................................+++ ......................+++ e is 65537 (0x10001) Enter pass phrase for server.key: パスワード入力 Verifying - Enter pass phrase for server.key: パスワード入力 # chmod 400 server.key #ls -la -r-------- 1 root root 963 6月 21 16:50 server.key
CSRファイルの作成
次に証明書署名要請書(server.csr)を作成します。 (本来はこれをCAに渡して証明書(CRT)を受け取るようです)
住所情報は適当にいいかと思いますが、FQDNは本番環境に即したものを入れて置く必要があります。
# openssl req -new -sha256 -key server.key -out server.csr(秘密鍵ファイルを指定) Enter pass phrase for server.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]:Chiyodaku ←市 Organization Name (eg, company) [My Company Ltd]:hoge ←会社名 Organizational Unit Name (eg, section) []:piyo ←部署 Common Name (eg, your name or your server's hostname) []:sv01.jehupc.com ←サーバのFQDN Email Address []: ←メール(任意) Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ←オプションパスワード(省略可) An optional company name []: ←オプション会社名(省略可) # chmod 400 server.csr #ls -la -rw-r--r-- 1 root root 741 6月 21 17:02 server.csr
自己署名証明書の作成
自己署名証明書、通称オレオレ証明書(server.crt)を作成します。(本来はCAに作成してもらいます)
引数には -in にCSRファイル、-signkeyに秘密鍵ファイル、-daysで有効期限の日数を指定します。
# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650 -sha256 Signature ok subject=/C=JP/ST=Tokyo/L=Chiyodaku/O=hoge/OU=piyo/CN=sv01.jehupc.com/emailAddress= Getting Private key Enter pass phrase for server.key: ←秘密鍵作成時のパスワード指定 # chmod 400 server.crt #ls -la -rw-r--r-- 1 root root 1025 6月 21 17:36 server.crt
これで証明書の作成は終わりました。
次にApacheの設定を行います。
apacheの設定
# vi /etc/httpd/conf.d/ssl.conf SSLCertificateFile /etc/pki/tls/certs/localhost.crt ↓ SSLCertificateFile /etc/httpd/conf/ssl.key/server.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ↓ SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key # service httpd restart httpd を停止中: [ OK ] httpd を起動中: Apache/2.2.3 mod_ssl/2.2.3 (Pass Phrase Dialog) Some of your private key files are encrypted for security reasons. In order to read them you have to provide the pass phrases. Server sv01.jehupc.com:443 (RSA) Enter pass phrase: ←サーバ再起動時に秘密鍵のパスワードを聞かれるので入力します。 OK: Pass Phrase Dialog successful. [ OK ]
サーバ起動時に毎回パスワードを聞かれるので秘密鍵からパスワードを消去します。 (セキュリティ的にはよろしくないような気がしますが。。。)
mv server.key server.key.org # openssl rsa -in server.key.org -out server.key Enter pass phrase for server.key.org: ←秘密鍵作成時のパスワード指定 writing RSA key # chmod 400 server.key # service httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
グループポリシーで証明書配布
さて、これでWebサーバ側の設定は終わったわけですが、なにせオレオレ証明書なためにクライアントのブラウザでは警告が表示されてしまいます。
今回このWebサーバにアクセスするクライアントはWindowsドメイン内のクライアントになるので、グループポリシーでこの自己証明書を配布することにしました。
グループポリシーの コンピュータの構成→Windowsの設定→セキュリティの設定→公開キーのポリシー→信頼されたルート証明機関 を右クリック→インポート で、証明書(server.crt)を選択し、ウィザードに従って登録します。
コンピュータの構成なので、適用は再起動のタイミングかなと思ったんですが、再起動しなくても適用されるっぽいです。
クライアント側で強制的に適用するには、以下のgpupdateコマンドで可能です。
gpupdate /target:computer
注意として、このサーバにアクセするときのURLに関し、証明書作成時に設定したFQDNでアクセスしないといけません。
例えば CN=sv01.jehupc.com で設定した場合、ブラウザのアドレスにも https://sv01.jehupc.com でアクセスしないといけないのです。
IPでアクセスしたり、内部にDNSサーバとか立てて、https://sv01/とかすると、仮に証明書がインストールされていても警告が表示されました。
参考:
apache+mod_sslでSSL server-memo.net こちらのサイトの内容をほぼコピペになってしまいました。
TechNet:グループ ポリシーを使用して証明書をクライアント コンピュータに配布する
ActiveDirectory グループポリシーで 信頼されたルート証明機関を追加する
CentOS7.2 64bit OpenSSLを使用して秘密鍵、CSRを作成し、自己署名のSSLサーバー証明書を作成 | kakiro-web カキローウェブ
CentOS6などで俺俺CAとSHA2証明書を作るときのメモ - Qiita
オレオレ証明書をopensslで作る(詳細版) - ろば電子が詰まっている