投稿者: mogumagu

自己証明書のhttpsに対してfile_get_contentsしたらエラー

自己証明書のhttpsに対してfile_get_contentsしたらエラー

開発環境では自己証明書でhttps運用してたりするのですが、今回以下のエラーが出てました。


Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

/etc/php.ini
を以下のようにとりあえず変更。

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo =/etc/httpd/conf/ssl/server.crt

[openssl]
; The location of a Certificate Authority (CA) file on the local filesystem
; to use when verifying the identity of SSL/TLS peers. Most users should
; not specify a value for this directive as PHP will attempt to use the
; OS-managed cert stores in its absence. If specified, this value may still
; be overridden on a per-stream basis via the "cafile" SSL stream context
; option.
openssl.cafile=/etc/httpd/conf/ssl/server.crt

※apacheが読み込んでいるcrtを変更した。

変更後apacheのリスタート。

参考URL
【解決済】さくらのレンタルサーバでPHP5.6を使用すると、file_get_contenst等でSSLエラーになることがある件と、当座の解消法

(現在は解決しました)PHPの外部への接続でSSLのエラーが出てしまう@KUSANAGI PHP7.2

Surface Pro3のキーボードが反応しなくなった

Surface Pro3のキーボードが反応しなくなった

Windos10のUpdate後にキーボードが反応しないということで調査。
症状としてはタッチパッドは動くけど蓋のキーボードが反応しない。

USBでキーボードを接続するとそっちのキーボードは反応する。
ただし、なぜか英語キーボードとして認識されてしまっている状態。

どうも利用者が自分で解決しようとして色々試した結果らしい。
デバイスマネージャを見ると最初はキーボードのドライバ自体が
表示されていなかった。どこかのサイトの情報にならってアンインストール
とかしたらしい。キーボードが効かなくなった最初の状態はわからないとのこと。
とりあえず、USBのキーボードを接続するとUSBキーボード用のドライバは入った。

とりあえず英語キーボードになってしまったのをまず直す。

Windows 10で日本語入力できない、半角/全角キーが効かなくなった場合の解決方法

このページの「対処方法2:言語の設定やIMEの設定を手動でやりなおしてみる。」で
「日本語キーボード(106/109キー)」に変更。説明のキャプチャとメニュー構成が
少し違うので注意「言語」側にオプションがあったのでそこで変更した。

次にSurface Pro3のドライバを探す

Surface 用のドライバーとファームウェアをダウンロードする

上記ページにアクセスし、「Surface Pro 3」の右側のURLに遷移。
「Download」をクリックして遷移、前のページにあった以下の説明に合致するmsiファイルにチェックを入れてダウンロード。


最新のドライバーとファームウェアによる更新を Surface に適用するには、
使用している Surface モデルと Windows のバージョンに一致する .msi
ファイル名を選択します。
たとえば、Windows 10 ビルド 15063 の Surface Book 2 を更新するには、
SurfaceBook2_Win10_15063_1702009_2.msi を選択します。
Windows 10 ビルド 16299 の Surface Book 2 を更新するには、
SurfaceBook2_Win10_16299_1703009_2.msi を選択します。


ダウンロードしたmsiファイルを実行するとドライバのインストールが始まる。
インストール後に再起動になるので再起動を行うとキーボードが復活した。

mkcertの調査

mkcert

FiloSottile/mkcert

ここを参考に設定
How to create locally trusted SSL Certificates on Linux and macOS with mkcert

  • 今回の環境
Windows Host 
vagrant + virtualbox
CentOS7 Guest(IP:192.168.1.110)

Guest側にmkcertを入れて、192.168.1.110サーバの証明書を発行してみる

# export VER="v1.1.0"
# wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-linux-amd64
・・・
2019-01-09 03:51:31 (1.47 MB/s) - ‘mkcert’ saved [4544368/4544368]
# chmod +x  mkcert 
# mv mkcert /usr/local/bin
# mkcert -CAROOT
/root/.local/share/mkcert
# mkcert -install
Created a new local CA at "/root/.local/share/mkcert" ?
he local CA is now installed in the system trust store! ??
# mkcert 192.168.1.110

Using the local CA at "/root/.local/share/mkcert" ?

Created a new certificate valid for the following names ?
  "192.168.1.110"

The certificate is at "./192.168.1.110.pem" and the key at "./192.168.1.110-key.pem" ?

# pwd
/root
# ll
total 16
-rw-------  1 root root 1708 Jan  9 03:54 192.168.1.110-key.pem
-rw-r--r--  1 root root 1513 Jan  9 03:54 192.168.1.110.pem

↑これを使ってapacheのSSLの設定してみたら、Guestマシン自体からのSSLアクセスは正常にできた。

でもHostのWindowsから試したらダメだった。

そこでWindows側にmkcertをインストールしてそこで発行したpemをapache側に設定したみた。

Windows側

まずchocolateyのインストールから

Windows環境にchocolateyをインストールし、使う

次にmkcertをインストールしてさっきと同じように↓

mkcert 192.168.1.110

↑こっちで発行したpemをLinux側で設定するとwindowsのブラウザアクセスでも大丈夫になる。

結局windows側のブラウザでアクセスするわけだからWindows側にCAROOTが無いといけないっぽい。
そうなるとCAROOTを社内で共有する必要がありそう。(全員mkcert入れた上で)

うーん。微妙。

新年あけましておめでとうございます

本年もよろしくお願いいたします。

新年なのでWordpressのバージョンを5.0.2にしてみたところエディタが大幅に変わっていて戸惑ったので投稿テスト。

これは慣れるまで大変かも。

元のエディタに戻したい場合はClassic Editorプラグインをインストールしてプロフィールで設定するらしい。

あっでもこのエディタMarkdown対応してるっぽい。Dropbox Paperに似てるかも?

wordpress gutenbergはmarkdown書けるよという話

【GAE】Could not load the default credentials.

【GAE】Could not load the default credentials.

GAEからCloud Datastoreを利用するスクリプトを書いていて、ローカルの開発環境からCloud Datastoreに接続しようとしたときに
以下のエラーが出てしまった。(PHPのビルトインウェブサーバを利用時)

Type: Google\Cloud\Exception\ServiceException
Message: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information

デプロイした状態だと正常に利用できている。
調べたところ以下が該当した。

Could not load the default credentials? (Node.js Google Compute Engine tutorial)

$ gcloud auth application-default login

上記を実行して、画面に表示されたURLにアクセスするとGoogleアカウントの選択画面になり、
利用するアカウントを選択した後にアクセスの許可画面が表示されるので許可する。
すると文字列が表示されるのでその文字列をコンソール側に入力することでアクセスする資格が得られる。

プロジェクトを作ったり消したり頻繁にしていて以下のコマンドで色々プロジェクトを変更していたのが原因っぽい。

$ gcloud config set project [YOUR_PROJECT_ID]

RTX1210 DNSキャッシュ関係メモ

RTX1210 DNSキャッシュ関係メモ

■DNSキャッシュの表示

show dns cache

DNSキャッシュの内容を表示する。

■DNS キャッシュのクリア

clear dns cache

DNS リカーシブサーバーで持っているキャッシュをクリアする。

■DNS キャッシュを使用するか否かの設定

dns cache use on|off
no dns cache use [on|off]

on DNS キャッシュを利用する
off DNS キャッシュを利用しない
[初期値] : on

DNS キャッシュを利用するか否かを設定する。
on に設定した場合、DNS キャッシュを利用する。
ルーターが送信した DNS 問い合わせパケットに対する上位 DNS サーバーからの返答をルーター内部に保持し、次に同じ問い合わせが発生したときでも、サーバーには問い合わせず、キャッシュの内容を返す。
ルーター内部に保持する DNS エントリの数はdns cache max entry コマンドで設定する。
off にした場合、DNS キャッシュは利用しない。
ルーターが送信した DNS 問い合わせパケットに対する上位 DNS サーバーからの返答はルーター内部に保持せず、同じ問い合わせがあっても毎回 DNS サーバーに問い合わせを行う。

DNS の設定

今回サイト確認の為にDNSのキャッシュをOFFにした。

 

Apache2.4の「HttpProtocolOptions」と「400 Bad Request」

昔perlで作ったSocketを使って外部のサーバからHTTPリクエストでデータを
取ってくるプログラムでデータがとってこれなくなっていた。

エラーの内容は「400 Bad Request」

調べてみるとデータを取りに行く先のサーバのApacheのバージョンが2.4に上がっていた。

色々テストプログラムを書いてみると、
リクエストヘッダを送るところの改行コードが「LF」なのが問題だった。
改行コードを「CRLF」にしたら解決。

HttpProtocolOptions Directive

Apache2.4は「HttpProtocolOptions」ディレクティブのデフォルトが「Strict」になっており、
この指定が厳密な解釈をすることでリクエストの改行がLFだけだったりすると、エラーになるようです。

最初リクエストヘッダの送信をヒアドキュメントで書いてて改行コードに全然気づかなくて時間がかかった。。

YAMAHA RT1210 簡易内部DNSサーバに設定追加

YAMAHA RT1210 簡易内部DNSサーバに設定追加

DNSリカーシブサーバって何ですか?

上記ページに「静的DNSレコードの登録機能 (簡易DNSサーバ機能) 」というのがあったので設定してみる。

27.11 静的 DNS レコードの登録

■書式

ip host fqdn value [ttl=ttl]

■設定例

ip host xxxx.mogumagu.com 192.168.3.100

RTX1210の管理画面にある「管理」⇒「コマンドの実行」で設定した。

SymfonyのアプリをAlpineコンテナに構築する際にgrep関係でつまずいた

Symfony2.8から3系のLTSにアップデートするためにまずは環境構築をと思い、
今までの開発環境からコンテナの開発環境に移行する時に起きた問題。

■今までの開発環境
CentOS6
PHP5.6.3
MySQL5.5

■今回試した開発環境
Docker
httpd:2.4.25-alpine
php:5.6-fpm-alpine
mysql:5.5

環境を構築してからソースをgit cloneして
設置していく際に以下のエラーが発生。

You have requested a non-existent service “*****************”.

サービスは読み込まれているか以下のコマンドで確認。

# ./app/console debug:container
/bin/grep: unrecognized option: fixed-strings
BusyBox v1.24.2 (2017-11-23 08:52:33 GMT) multi-call binary.

Usage: grep [-HhnlLoqvsriwFE] [-m N] [-A/B/C N] PATTERN/-e PATTERN.../-f FILE [FILE]...

Search for PATTERN in FILEs (or stdin)

        -H      Add 'filename:' prefix
        -h      Do not add 'filename:' prefix
        -n      Add 'line_no:' prefix
        -l      Show only names of files that match
        -L      Show only names of files that don't match
        -c      Show only count of matching lines
        -o      Show only the matching part of line
        -q      Quiet. Return 0 if PATTERN is found, 1 otherwise
        -v      Select non-matching lines
        -s      Suppress open and read errors
        -r      Recurse
        -i      Ignore case
        -w      Match whole words only
        -x      Match whole lines only
        -F      PATTERN is a literal (not regexp)
        -E      PATTERN is an extended regexp
        -m N    Match up to N times per file
        -A N    Print N lines of trailing context
        -B N    Print N lines of leading context
        -C N    Same as '-A N -B N'
        -e PTRN Pattern to match
        -f FILE Read pattern from file

Symfony Container Public Services
=================================
・・・
いつもより少ないサービス一覧
・・・

するといつもより少ない。。
あと、以下の部分が気になる。

/bin/grep: unrecognized option: fixed-strings
BusyBox v1.24.2 (2017-11-23 08:52:33 GMT) multi-call binary.

もしかしたらBusyBoxのgrepに何かあるんじゃないかということで、

JMS\DiExtraBundleの設定を変更してみる。
https://jmsyst.com/bundles/JMSDiExtraBundle/master/configuration
「disable_grep: true」を追加。

Symfony/app/config/config.yml

jms_di_extra:
    locations:
        all_bundles: false
        bundles: [AppBundle]
        directories: ["%kernel.root_dir%/../src"]

↓に変更

jms_di_extra:
    locations:
        all_bundles: false
        bundles: [AppBundle]
        directories: ["%kernel.root_dir%/../src"]
    disable_grep: true

とりあえず動いた。

WordPressの点検

WordPressの脆弱性を悪用されて、エックスサーバーからアクセス制限をかけられた話

↑のブログを読んで細かな対策は都度行っていたけど脆弱性の点検はしていなかったので点検してみる。

ワードプレスをURLで検査してサイトの脆弱性を調べましょう

結果は

[要緊急対応]readme.htmlがワードプレスのバージョンを漏洩しています
といくつかの[注意]ヘッダー出力(情報漏洩の可能性)でした。

「readme.html」を削除してとりあえず対策は完了。

ただヘッダー出力の内容が気に食わなかったのでこちらを参考にセキュリティ関係の設定をファイルにまとめるように変更。

CentOS7のApacheの設定

バージョン確認

# httpd -v
Server version: Apache/2.4.6 (CentOS)

設定の追加

# vim /etc/httpd/conf.d/security.conf

# バージョン情報の隠蔽
ServerTokens Prod
Header unset X-Powered-By
# サーバ署名(バージョンとサーバ名)のOFF
ServerSignature Off
# httpoxy 対策
RequestHeader unset Proxy
# クリックジャッキング対策
Header append X-Frame-Options SAMEORIGIN
# XSS対策
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
# XST対策
TraceEnable Off

チェックとリスタート

# httpd -t
# systemctl restart httpd.service

もう一度チェックすると新しく設定したHeaderが表示されたけど
この内容なら大丈夫なはず。

WordPressは本当に立てるのは簡単だけど、
メンテナンスをちゃんとしないと危険。。

今後は定期的にチェックしていく。