Let’s Encrypt + Apache でちゃんと証明書の生成が完了してるのに ‘*.pem’ does not exist or is empty というエラーが出る時のメモ

問題点

私の環境ではmod_sslのインストールでも一悶着ありましたけど、長くなるので割愛するとして、CentOS6.7 + Apache2.2.27の環境でLet’s Encryptのクライアントをインストールし、webrootで各証明書ファイルの生成も完了し、virtualhostでcert.pem、chain.pem、privkey.pemの場所指定も問題ないのに「apachectl configtest」を実行すると以下のエラーで怒られました。

$ apachectl configtest
Syntax error on line XX of /path/to/ssl.conf:
SSLCertificateFile: file '/path/to/cert.pem' does not exist or is empty

こういう時は相手が人間なら「はー?ふざけんなボケカス!空っぽなわけねーだろうが!!目ん玉かっぽじってよく見ろこのスットコドッコイが!!!」とか言えば収まるところに収まると思いますが、相手がコンピュータの場合は今の所人間が必死になって問題を特定するしかない。早く汎用AIが実現してほしい。

原因

まあ大抵パーミッションがあやしいんですよ。こういうのは。

とかいってすぐ分かったような感じで書いてますけど、設定ファイル見直したり、ググって原因ぽいものが見つからないか現時点で1時間くらい駆け回ってますので。はい。

で、とりあえずパーミッションを確認してみたら案の定「/etc/letsencrypt/archive/」と「/etc/letsencrypt/live/」のパーミッションが「744」になってました。

たぶんこれが原因だろうということでchmodでパーミッションを「755」に変更。

$ sudo chmod 755 /etc/letsencrypt/archive/
$ sudo chmod 755 /etc/letsencrypt/live/

この状態で「apachectl configtest」を実行すると…

$ apachectl configtest
Syntax OK

よかったね。

顔アイコンジェネレータを作った

スクリーンショット 2015-07-03 22.33.11

顔アイコンジェネレータを作りました。

PNG Face Icon Generator(http://ficns.com/)

なんかバグがあると思いますが、最低限動作する感じになったので自由にご利用ください。

アイコンのオリジナルは以下のURLでダウンロードできる「Avatars and Emoticons Vector Set」というフリーの素晴らしいベクターファイルです。勝手ながら使わせていただきました。どうもありがとうございます。

http://www.webappers.com/2014/03/26/free-download-avatars-and-emoticons-vector-set/

今のところ、口の大きさがそろってなかったり、各パーツの位置などを調整することができませんが、そのうち対応するつもりです。

制作でよく使うWPプラグインまとめ

個人的忘備録用のエントリー。

よく使う

SiteGuard WP Plugin

セキュリティ強化。ログインロックダウン、アラート、日本語画像認証、フェールワンスなど全部入り。

Sucuri Security

マルウェアスキャナ。上記のSiteGuardプラグインと競合する機能も含まれるが念のため。

Crazy Bone

ログインしたユーザー名やリモートIPを記録する。上記のSucuri Securityプラグインと(以下省略)

PS Disable Auto Formatting

WPの標準エディタの仕様が未だにアレなのでまだこのプラグイン使ってる。

Google Analytics Dashboard for WP

Google Analyticsのトラッキングコード設置用。ダッシュボードで簡易的なアクセス解析ができて便利。

Admin Menu Editor

管理画面の不要項目を非表示にできるプラグイン。投稿やコメントなどを利用しないサイトを構築した場合、メニュー項目自体を非表示にできるため、認知負荷が減少し、多少ユーザビリティが向上するのに加え、余計な質問が飛んでこなくなるのでクライアントワークで重用してる。

Duplicate Post

投稿や固定ページ、カスタム投稿タイプを複製できるようになるプラグイン。

Image Widget

リンク付きの画像ウィジェットを追加できるプラグイン。便利。

MW WP Form

確認画面付きのメールフォームを簡単に作成できるプラグイン。確認画面の有無はユーザビリティの概念を超えてもはや宗教と化しており、「確認画面が無いなんて信じられない!」「確認画面が不要だって?カルマが足りないんじゃ無いですか?」とクライアントに詰め寄られる可能性が高いため、ありがたくこのプラグインを使ってます。バリデーションやメール送信に関するフィルターが用意されているため、使い勝手が良い。画面描画系のフィルターフックがあるとさらに良い。

気になる

Types

カスタム投稿タイプとカスタムフィールドを一括管理できるらしい。便利そう。

twitterから「○○さん、ログインいただきありがとうございます。」というメールが届く

ここ最近、全くログインした記憶が無いにもかかわらず、開発用に取得したtwitterアカウントに表題のメールが届きました。

念のためパスワード変更しておきましたが、アカウントをクラックされたのか、あるいは長期間ログインしていないアカウントにtwitterがメール飛ばしているだけなのかちょっと判断がつきません。

後者なら問題ありませんが、前者だと色々と厄介です。

検索するといくつか同じ事象がヒットするものの解決せず。

まあ、こんなものはtwitterに確認してみれば良いんですが、なんとtwitterの問い合わせ先が見つからない。5年以上使ってて初めて知りましたが、正確には総合お問合せみたいなものが見当たりません。

日本語版のtwitterサポートアカウント(@TwitterHelpJP)は返事しないらしいし、一応、ヘルプはあるけど一向にフォームが現れない。

twitterくらいの規模だと問い合わせなんてさばき切れないのだろうな。

似たメールが届いた事がある人は教えて頂けると助かります。

十戒を簡単につくれるWebアプリ「Jikkai」

MA9の締切日を10月31日だと勝手に勘違いしてて結局間に合いませんでしたが作ったので公開します。

Jikkai(http://alpha-version.com/jikkai/

Jikkaiはその名の通り「十戒」を作ることが出来るWebアプリです。十戒をつくると同時に十戒を破壊するためのURLが生成されるので、信頼出来る人等にURLを渡して十戒に背いていないかチェックしてもらいます。

具体的にはまず以下の様な十戒が作られます。

鋼の教えに背くとこれがこうなる。

jikkai2

そしてさらにこう。

jikkai3

最後にこれ。

jikkai4

5年くらい前に思いついたやつをバックエンドのみappiariesで作りました。

jsonでデータのやり取り(読込、作成、更新、削除)ができるので、データベースとかサーバーサイドの事はよくわかんねえけどメモ帳とか掲示板みたいなの作りたいという人はBaaSを使うと良いかもしれませんね。

以上。

WordPressで投稿者アーカイブを出力させないようにする方法

はっきりとした事は不明だがWordPress日本語フォーラムの以下の報告を皮切りに改ざん報告がちらほらと見受けられる。

WordPress › フォーラム » サイト改ざん?

Googleの検索結果では2011年くらいにも同様の事例が引っかかるので、今に始まったわけじゃないようだが、ここ半年くらい、特にここ数週間は顕著なようだ。

今後、ロリポップやhetemlから何らかのアナウンスがあるんじゃないかと思うが、そんな中、node.jsをいじろうと思って契約したものの、全くいじっていないGehirn Web ServicesからWordPressの不正アクセスに関するメールが届いたため、一部抜粋して転載する。

日本時間の2013年8月28日 午後3時頃より、平常時よりも大量の WordPress ログインを試みる不正なアクセスが検出されています。
現在、弊社の分析局で攻撃手法や特徴を分析しております。

弊社の分析によりますと、 /?author=1 にアクセスすることで使用しているユーザー名が分かることから、 デフォルトの admin アカウント以外のユーザ名を設定されているお客様にも影響があると見られ、十分に注意が必要です。

ということで、どうやらWordPressの投稿者アーカイブが狙われているっぽいので、これを無効化するコードを二つ程紹介する。

投稿者アーカイブを非表示にする

以下のコードをテーマの functions.php に突っ込むとauthorクエリ(?author=xxx)を無効化して404を返すようになる。

function disable_author_archive($q) {
  if ( $q->is_admin ) {
    return $q;
  }elseif ( $q->is_author ) {
    unset( $_REQUEST['author'] );
    $q->set( 'author', '' );
    $q->set_404();
  }
}
add_action('parse_query', 'disable_author_archive');

参考:Disable the WordPress Public Search

上記の参考先では ?s= の検索クエリを無効化するものなので、気になる人はついでに利用すると良いんじゃないかと思う。

あるいは以下のコードでURLに author が含まれた場合、どこか適当なページにリダイレクトさせるようにする。

function redirect_author_archive() {
  if( isset($_REQUEST['author']) || preg_match('#/author/.+#', $_SERVER['REQUEST_URI']) ){
    wp_redirect( home_url( '/404' ) ); //リダイレクト先
    exit;
  }
}
add_action('init', 'redirect_author_archive');

参考:WordPress › フォーラム » セキュリティ向上:ログインIDをURLにしたくない

他にもプラグインで対応可能かもしれない。

PhoneGapでカラーコード変換アプリを作成

単なる宣伝なんですが、アプリ登録の全体の流れを知るためにPhoneGapですげー適当に作ったカラーコード変換アプリがAppStoreで公開されました。

↓ついでにAndroid版も公開しました。全く同じコードで吐き出せるかと思いきや、Andoroidではなぜか navigator.notification.alert が上手く働かないため、jsの alert() をそのまま使ってます。あとグラデーションが妙に汚い。また、Andoridエミュレータで見たら重かったのでjQueryのアニメーションをカットした他、細かい部分を調整してあります。


Android app on Google Play

(さらに…)

【防備録】node.jsでnode-http-proxyを使ってApacheとの共存環境を作ったのでメモ

 

※あまりテキトーな事書くのもどうかと思いますが動いたのでメモしておきます。

 

 

【概要】

WebSocketを使ったサービスが作りたくなり、どうせなら前から気になってたnode.jsを使おうと思い立ったわけですが、既存のホスティング環境(さくらのVPS)にはApacheが走っているため、そのまま使おうとすると「http://example.com:8124」とかポート番号直打ちになるため、ちょっとカッコ悪いという問題が発生。(80番ではApacheが走ってるのでnodeが動かせない。)

 

そのため、なんか方法は無いものかと調べたら以下の素敵なスライドを発見。

 

Node.js勉強会@関西 第0回 Node.jsでつくるリバースプロキシ

 

node製の「node-http-proxy」というこれまた素敵なものがあるらしく、これを使えばリバースプロキシが簡単に作れるらしい。

 

ただ既存の環境ではApacheにバーチャルホストを設定してるので、そのままやっちゃっていいものなのか、いまいち良く分からない。

 

そのため、さらに検索したところ、なにやら凄く分かり易いサンプルを発見。

 

Reverse HTTP Proxy (Apache + nodejs)

 

正にこれだ!ということで早速、実装に取りかかる事に。

 

 

【目的】

現在、ポート80番で動いているApacheを「8080番」で動作するように変更し、node-http-proxyを使ったリバースプロキシを「80番」動作させて、各ドメインごとにApacheで処理するか、nodeで処理するかを自動的に振り分けるようにします。

 

 

【やった事メモ】

※以下、既にnode.jsはインストール済みという前提で進めます。環境はCentOS6.2です。

 

  1. 何はともあれnode-http-proxyのインストールを行います。

    npm install -g http-proxy
    npm link http-proxy
    
  2. サーバの適当な場所に上記の参考先を元にしてリバースプロキシのjsファイルを作成。

    [proxy.js]

    var httpProxy = require('/path/to/node_modules/http-proxy');
    //※本当はフルパスで読み込まなくてもいいはずです
    
    var options = {
      hostnameOnly: true,
      router: {
        'example1.com': '127.0.0.1:8080',
        'example2.com':'127.0.0.1:8080'
      }
    };
    var proxyServer = httpProxy.createServer(options);
    proxyServer.listen(80);
    console.log('It Works!');
    

    ※http-proxyの呼び出しがフルパスなのは -g を付けてインストールしたにも関わらず、私の環境ではNODE_PATHが通ってないらしく、良く分からなかったのでフルパスで書きました。通常はフルパスの必要はありません。

  3. Apacheのポートをこれまでの「80番」から「8080番」に変更。当然、そのままではサイトに繋がらなくなるので、既にApacheで何か動かしてる人は注意して下さい。
    以下、設定例。

    [/etc/httpd/conf/httpd.conf]

    Listen 8080
    
    NameVirtualHost *:8080
    
    <VirtualHost *:8080> 
      DocumentRoot /path/
      ServerName www.example1.com
      ServerAlias example1.com *.example1.com
    </VirtualHost>
    
    <VirtualHost *:8080>
      DocumentRoot /path/
      ServerName www.example2.com
      ServerAlias example2.com *.example2.com
    </VirtualHost> 
    

    コンフィグの修正が完了したら構文確認後、Apacheを再起動、またはコンフィグをリロードします。

    /usr/sbin/apachectl -t
    /etc/init.d/httpd restart
    

    この時点で一旦、80番で繋がらなくなります。

  4. 先ほど作ったリバースプロキシ(proxy.js)を動かします。

    node proxy.js
    

    動いた!・・・と思いきやエラーが発生。

    Error: listen EACCES
    

    どうやら80番で動かすにはsudoでやらないといけないらしい。再度実行すると今度は無事に動いた。

    sudo node proxy.js
    

    上手くいっていれば、この状態でバーチャルホストに設定されたドメインにアクセスするとこれまで通りちゃんとレスポンスが帰ってきます。上手くいかない場合はリバースプロキシの設定とApacheの設定をもう一度見直して下さい。

  5. さて、動いたのは良いのですが、このままの状態だとコンソールに「It Works!」と表示されたままで他の作業が出来なくなります。Macのターミナルなら標準でタブが付いてるので大した問題でもないのかもしれませんが、素人に毛が生えた程度の私くらいのレベルだともはやこの世の終わりに近い状態です。

    というかnode.jsには「forever」というnode.jsで作成したプログラムを永続化し、デーモンとして管理できるパッケージがあるのでそれを使えば話は早いのですが、今回のリバースプロキシは「80番」という特権ポートで動かしているためか、どうやらforeverでデーモンにする事ができないらしい???

    じゃあどうするのかというとコマンドの最後に「&」を付けてコントロールを奪われないようにします。

    sudo node proxy.js &
    

    こうするとバックグラウンドでプロセスが動き続けるので、リバースプロキシを動作させた後もコンソールのコントロールを奪われる事無く、色々と作業を継続出来ます。ただ、この方法は色々と突っ込みどころが多そうなので、詳しい人はデーモンにする詳しい方法とか教えてもらえると助かります。

    参考リンク:

    nodeのアプリをport80で動かす
    ログアウトした後もコマンドを実行し続ける方法

  6. これで一通りの目的は達成出来たため、後はnode.jsでガリガリとアプリを開発して適当なポートで動作させ、proxy.jsに動作しているnode製アプリの記述を加えてやれば、特定のドメインでアクセスした時にnodeのアプリが動くようになります。
    ただ、proxy.jsは最低限の記述となっているので以下のコードを参考にもう少しまともなリバースプロキシにした方が良さそうです。今だとhttpsとかで接続しても繋がらないんじゃないかと思います。
    参考:
    node-http-proxyを使ったいわゆるバーチャルホスト対応Webサーバー

    以上。

リンク集的なものが作れるやつを作成

あまりにも中途半端だけど一応動く。

colinkr(http://alpha-version.com/colinkr)

Google ChromeやSafariの初期画面っぽい感じでサイトのサムネイル画像が一覧で見れるやつのWeb版。

画像の生成はWordPress.comのAPIに丸投げしてキャッシュを全く生成していない。おまけにタイトルタグはfile_get_contents関数で引っ張ってきてるので1つのリンク集にURLを10個くらい登録すると非常に重い。相手方のサーバーに負荷をかけるクソ仕様。

前に、フランス人かスウェーデン人あたりが簡単にWebサイトのブックマークリストとか1ページだけのWebサイトとかを作れるサービスを公開してた気がするんですけど、サービスの名前を忘れてしまったので仕方ないので作りました。

ベースにはFluid Squares V2というレスポンシブレイアウトのフレームワークを使用。(ライセンスが書いてない事に今さら気付いた・・・)
WordPressで作ってるので、tanzakuテーマとかを使わせてもらった方が良かったかもしれない。

4月1日

休日出勤なんてありません。

shiba_inu_bot

calico_cat_bot

Pages: 1 2 3 4 Next
IT起業アカデミア