Raspberry Pi 2でサーバ作ってみる(11) 〜Apacheビルド その3〜

とりあえずhttpサイトは動いたのでSSLを使ったhttpsアクセスができるようにします。
ただ、ちゃんとした証明書を準備するのは大変なので(費用的な意味で)、
いわゆるオレオレ証明書を使うことにします。

#オレオレ証明書の作成
cd /usr/local/apache2/conf
/usr/local/ssl/bin/openssl genrsa -aes128 1024 > server.key
/usr/local/ssl/bin/openssl req -new -key server.key  > server.csr
/usr/local/ssl/bin/openssl x509 -in server.csr -days 36500 -req -signkey server.key > server.crt

後はhttpd.confでmod_ssl.soをロードし、httpd-ssl.infoをIncludeするようにして、Apacheを再起動、
としたところ、エラーが出てしまいました。

Invalid command 'SSLCipherSuite', perhaps misspelled or defined by a module not included in the server configuration

エラーを調べたところ、
Invalid command ‘SSLCipherSuite’, perhaps misspelled or defined by a module not included in the server configuration | Matty工房のWeb開発誌【PHP/HTML5/アプリ開発】
こちらのサイトに従い、LoadModuleに追加。すると今度は、

httpd: Syntax error on line 147 of /usr/local/apache2/conf/httpd.conf: Cannot load modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: SSL_CONF_CTX_free

こんなエラーが。
Apache2.0でSSL - Linux Square - @IT
を参考に、Apacheコンパイル時に--enable-ssl=sharedにする→ダメ
この時点で結構いろいろ試しました。ソースの中身を見たり。
それでも原因がわからず、SSLはダメかなーと思っていたところ、
ふと、CentOSでやっていた時はOpenSSLのバージョンが1.0.1だったのですが、最新版があったため1.0.2に変えていたことを思い出しました。
動作実績?のありそうな1.0.1にしてみてダメなら諦めよう、と思いバージョンを変えて再インストール。
→いけた!
…と思ったらエラー

SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

でも、今までと違う。いつもどおりエラーをGoogle先生に聞いてみると、
Gentooの~amd64にApache 2.4.1が来たので試してみた
とあったので、次の記述をhttpd-ssl.confに追記

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

これでうまくいった!
あとは、httpsでアクセスしてみる。
オレオレ証明書なので、警告がでるけどそのまま読み込んでいくと…開いた!
ということで、なんとかSSLも使えるようになったっぽいです。

とりあえずApache関連はここまで。
とにかく奥が深いので、あまりハマり込まないように、この辺でいったん他のことを進めます。

;(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ if (pre.className.indexOf("gist") !== -1) { return } var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) || 0 ol.className = "preLine" ol.setAttribute("role", "presentation") // no lang, no line-number if( pre.className && ! /lang-./.test(pre.className) ){ br.length += 1 } for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)