プライベート認証局(CA)と自宅サーバ用クライアント証明書の作成方法

イントラネットを構成する時のプライベート認証局(CA)とローカルを結ぶサーバー証明書の作成方法。現在自宅のMAIL及びFTPサーバは、この認証局発行のサーバー証明書で暗号化してる。

【認証局(CA)と証明書の作成準備】

準備1)
XamppのOpenSSL-Win32とPerlのシステム→環境変数の登録を削除、system32内のDLも削除する。
準備2)
最新のOpenSSL-Win64とActivePerl64をダウンロードしてXamppと別なディレクトリーにインストールする。その上でシステム→環境変数に登録する。 ➡ 例)C:\
準備3)
作業用のフォルダー「etc又はwork」を作りサブフォルダー「demoCA」も作る。
準備4)
OpenSSLのファイルopenssl.cfgとCA.plの二つをコピーして作業用フォルダーに入れる。

【認証局(CA)のためopenssl.cfgを修正】

[CA_defult]
# クライアント証明書発行時に履歴として発行証明書を残すため、コメントアウトを外し設定を変更する。
#unique_subject = no ➡ #外す、yes
# クライアント証明書失効処理時にエラーが出るため、コメントアウトを外しcrlnumberを作成しておく。
#crlnumber = $dir/crlnumber ➡ #外す
[usr_cert]
# 最初にサーバ証明書を作成するため、「nsCertType」を「server」とするため、コメントアウトを外して有効にする。
#This is OK for an SSL server.
#nsCertType = server ➡ #外す

[v3_ca]
# CA証明書作成時の証明書のタイプをSSL/E-mail用と指定するため、「nsCertType」を「sslCA, emailCA」とするため、コメントアウトを外して有効にする。
#Some might want this also
#nsCertType = sslCA, emailCA ➡ #外す
# ベーシック認証のデフオルトが1年なので3年に、CA.plの変更しても反映されないのでopenssl.cfgのdefault_daysを変更する。
defaul_days = 365 ➡ 1095(3年)

【プライベート認証局(CA)の作成】

cd c:\etc
C:\etc> CA.pl -newca

・PRM pass phrase  xxxxxxxxxxxxxxx ➡ フレーズ
・Organization: xxxxx ➡ 例)Private_CA、Root_CA
・UnitName: Admin ➡ 何々Dept又は「エンター」でも可
・Common Name; xxxxxCA ➡ RootCAとか PrivateCA
・Mail: xxxxx@xxxxx.xxx ➡ メールアドレス

◎サーバ用CA証明書のために作成
# サーバで使用するためには下記の操作でCA証明書(cacert.crt)だけを切り出しておく

C:\etc>openssl x509 -in ./demoCA/cacert.pem -out ./demoCA/cacert.cer

# CA証明書をブラウザにインポートするためのderファイルを作成

C:\etc>openssl x509 -inform pem -in ./demoCA/cacert.pem -outform der -out ./demoCA/ca.der

【各サーバ用証明書の作成】

注意事項:
1)認証局(CA)で作成したファイル移動しないで作業
2)CA証明書とサーバ証明書のON(Organization Name)は異なる名称
3)server.key は ここでいう newkey.pem のこと。即ち server.key = newkey.pem
4)ホスト名は、必ずhttps//…でアクセスするホスト名とすること

・PRM pass phrase: xxxxxxxxxxxxxxx ➡ CAと同じフレーズ
・Organization: xxxx_Network ➡ CAと異なる名称
・UnitName: Admin ➡ 何々Dept又は「エンター」でも可
・common Name: WWW用:xxxx.xxxxxx.xxx // Mail&FTP用: *.xxxxxx.xxx
・Mail: xxxx@xxxxxx.xxx ➡ メールアドレス

◎ 秘密鍵からパスフレーズを入れないよう、「-nodes」で作成

C:\etc>CA.pl -newreq-nodes

◎サーバ用証明書のサインと(server.crt)の作成

C:\etc>CA.pl -sign

◎サーバで使用するためには下記の操作でサーバ証明書(server.crt)だけを切り出しておく。

C:\etc>openssl x509 -in newcert.pem -out server.crt

◎バックアップ前の確認:
c:\etc>
・newkey.pem : 秘密鍵
openssl rsa -in newkey.pem -text
・newreq.pem : 証明書発行要求(CSR)
openssl req -in newreq.pem -textcacert.cercacert.cer
・newcert.pem : demoCAの秘密鍵で署名した証明書
openssl x509 -in newcert.pem -text

◎サーバ用証明書等のフォルダーを作ってバックアップ

c:\etc>md s01
c:\etc>move *.pem s01
(newcert.pem, newkey.pem, newreq.pem)

c:\etc>move *.crt s01
(server.crt)

◎作成終了後の各証明書の設定

・認証局(CA)のcacert.cerだけをクリックして信頼された証明機関へ登録する。
・サーバの証明書は目的のサーバへコピー、又は指定する。

◎新たにサーバー証明書を作成する時は、フォルダを作成(s02)して【サーバー証明書の作成】から開始する。


「Value-Domain」と「MyDNS.jp」

【Value-Domain】
Value-Domain (DDNS)を選んだのは、固定IPでの維持が困難となり再契約時に解約したので、新たに国内のドメインサービスから気に入ったドメイン名を登録してフリーのDDNSサービスで自宅サーバのウエブサイトを公開するためだった。

当時、ドメイン名が年間980円だったので5年契約で購入、DDNSサービスの登録自体は独自IPのDNSレコードへ登録した内容とさほど違いが無かったので、2~3時間ほどで公開できた。

自宅サーバのMail/FTP設定もこのドメイン名で再設定、ただMailに関してだけポート25なのでOutLook、GoogleMailへ送信(受信OK)できない。設定の不備でなくOP25B(ポート587)の設定が必要となる。フリーソフトの「Stunnel ]でも設定方法によっては可能だけど、目的のサービスがあるかValue-Domainのページを隅から隅までチェックしたが見当たらなかった。

【MyDNS.jp】
あるサイトがMyDNS.jp が試験サービスという位置づけのSMTPサービスを提供してるかも?と驚きの情報を載せてたので直接MyDNS.jpのサイトで確認すると、サービスは利用可能な気配だった。

それ以上に驚いたのは、DDNSサービスでMyDNS指定のアドレスでなく取得した独自ドメイン名が使えること、DDNSサービスの切り替えはNSレコードだけで移行できること等々が記載されていたことで、即登録手続きをした。手続後直ちに送られてきたID&Passwordで会員ページへ移動して必要事項を記入&設定、その後、Value-DomainのDDNSサービスの設定を解除と移行手続(Name Serverのprimary&secondaryを変更)で終了。

接続は長時間待たされる事もなく30分程度、又、SMTPサービスの利用は、自宅MailサーバにID&Password、代替えポート587、SMTPサービス用ホスト名、等々を設定後「NSLOOKUP」で表示されるTXTレコードをコピー、MyDNS.jpサイトのログインからレコード画面のTXTレコード欄へコビーしたTXTレコードを張り付けて登録すればOK!、IPアドレスは変化すると自動的に書き換えてくれる。

MyDNS.jpへの更新はフリーの更新ソフト「DiCE 」に登録して毎週更新できるように設定、それ以外にもメーラーで受信操作できるようにメールボックスを作成、毎日1回は巡回操作してるので更新OK!
MyDNS.jpへ全て移行できればと思ったけど、今のところValue-Domainも捨てがたいので現状のままでいくことにした。


IP&Portアタックに「PeerBlock」をインストール

過去に膨大な数のメール・アタック?夜中の集中攻撃が度々あった当時は、WindowsXPで利用してたフリーソフト「TCP Monitor Plus 」のパケットフィルタリングでドロップさせて何とか防いでいたが、このパッケトフィルターがWindows8.1や10からサポートを停止したため、替わりになるソフトを捜してた。

調べてる中で「PeerGardian2」と言うソフトを見つけたがサポート中止、その後継ソフトのPeerBlockが紹介されていたので、「PeerBlock1.2_r693 」をダウンロードしてインストール。

操作:タスクトレイのPeerBlockアイコン(クリック)

1)管理画面のProtectionの設定から「HTTP is allows又はblocked」、各項目を確認して「チェック」を入れる。
2)リスト管理:取得したリストや追加したいIPアドレスを登録、自宅サーバのメール用は新規にエディターでTXTファイルを作り「Create List」からblockリストを作成。
3)「Port Settings」のDefult Portの設定から「FTPの21(Transfer)、SMTPの25(outgoing mail)、POP3の110(incomming mail)」を「allows又は、block」、適用するポートの「チェックを外す」と適用、「チェックを入れる」と適用外。

有料のBlockリストは世界中全てのIPが記載?とにかくメールとFTPが主な利用なので全てに「チェック」を入れた後、「HTTP is allowed」にした。その上で尚、TCP Monitor PlusのIP監視モニターやセッションモニターで不審な動きをするIPと、MercuryMailのログから挙動不審なIPもピックアップして、メール用のblockリストに加える事にした。

ps. txtファイルの形式は、LF + SJIS 、CR+LF + SJIS、Windowsのメモ帳以外のエディター


MailサーバをSpam Mail Killer v.2.30が常時監視

つい最近まで自宅サーバのメールに何故か迷惑メールが凄い勢いで増えたと同時にWindows Defenderが削除した旨のメッセージを表示したりでビックリ!だった。多くは海外の@gmail.comからだけど請求書だのいやらしい画像添付のメールが届いたりした。多分「YuTube」に登録して動画をアップロードしたり、たまにドラマや映画を見たりしたのが原因?だったかも。。。

Spam Mail Killer 」は心配したWindows10での操作も問題なし。早速アカウントの登録と削除設定、その他の設定は目を通す程度でも十分期待できる。

取り合えずアカウントの登録を済ませ基本設定のまま試したところ、MercuryMail(サーバ)へ到着する大半のメール(特に海外から)を削除して、その削除したメールの内容も確認できた。迷惑メールの完全削除前に、許可すべきメールアドレスを許可リスト、削除すべきメールを禁止リストへ登録、又、常時作動させるため管理ツールの「コンピュータ管理」へ既定の15分間隔で登録、毎日2回程度削除メールの確認やログで挙動不審のメールアドレスもチェック。

今では迷惑メールや海外メールを確実に削除するので大量の迷惑メールの事が嘘のようだ。


留守番中の「マル」と室内用監視カメラで交信

ずいぶん前になるけど「TENVIS(中国製)の室内用監視カメラで「ペットなどの動向をスマートフォンで観察出来る。」と言ったフレーズが目に付き、価格が4,000円代のカメラを見つけた。だけどレビューを見ると大半がクレームなので随分迷ったけどダメもとで購入した。

製品名は「JPT3815W for 2014」という室内用監視カメラで、付属のソフトをインストールして説明書を見ながら設定、有線での設定はスムーズだったが無線の設定で躓いた。PrivateIPを決めてPCで室内を観る分には問題ないが、TENVISが提供してるDDNSアドレス及びIPアドレスではiPhoneとアクセスできない。言いたくないが付属のGuideBookがまたいい加減なので一苦労だ。

ならば同じDDNSなので自宅サーバのDDNSとPrivateIPでポートを決めiPhoneのTENVIS専用ソフトの設定及び本体のネットワークを訂正したところ難無くiPhoneでOK!映し出される画質は良くないけど一通りの機能は付いていて外出先からiPhoneでマルを呼ぶと不思議そうにカメラを見たり、帰る直前に呼ぶと一目散に横切って行く姿を観ながら楽しんでいたが、今ではソファーから「ワンワン!」と声がするだけで「僕は騙されないぞ!」だよ、きっと!

TENVISのJPT3814Wを予備のサーバPCに移し替えたが回線が途切れたり、画面が真っ暗になったりとイライラするので予算的に合えばグレードアップしたカメラが欲しいと思い始めたね。


Letsencryptのクライアント証明書をメール&FTPサーバにも設定

Letsencryptのサイトでワイルドカードの説明を読んでいて気が付いたのは、現在取得しているLetsencryptのクライアント証明書(SSL/TLS)でMercuryMail(メールサーバ)やFTPサーバにも利用可能だと言うこと、osblog.osshinet.comのドメイン(FQDN)名はosshinet.comでosblogはapacheでhttpd-ssl.confのAlias(ホスト名)、Googleではホスト名をコモンネームとして取得した証明書が必要なだけで、メール&FTPサーバにはドメイン(FQDN)名のosshinet.comで利用可能と言うのが理由だけど。。。

MercuryMailにLetsencryptのCRTファイルを登録してコマンドプロンプトで確認。試しにiPhoneへ送受信OK!

Filezillaもパネルを開いてSSL/TLS SettingでLetsencryptのKEY&CRTファイルを登録、SSL/TLSで問題無くiPhoneと送受信OK!

取得したLetsencryptのクライアント証明書で暗号化できることが分かって良かった。


xmlrpc.phpを狙ったブルートフォース攻撃

xmlrpc.phpを狙ったブルートフォース攻撃

アクセスとエラーログをチェックすると一向に攻撃が止まらないようでxmlrpc.phpを1秒間に2~3回の攻撃でビックリ!今日で3日目なのだ!!

185.188.204.2 海外のホスティングサービス?

まだ元のサーバPCの回復が見込めないので、新たにPeerBlockでIPをBlockすることにした。ソフトをダウンロードしてインストール、ipattack用とmail&FTPDのListを作ってipattack用listに攻撃してるIPを登録、早速起動させてBlockして今では静かに点滅してる。

PeerBlockでIPを遮断する前だけど、何が目的で攻撃してる?毎秒2~3回の攻撃だったので「TCPMon」を開いて観察すると幾つかのポート(PID)に瞬時に接続できてる。NETSTATで確認すると何かの応答を待ってる感じで、思い当たるのはPCのリモート接続を許可しろ!?だと察知して「許可しない」に変更したところ、その後は応答待ちが消えたけど。

いずれにしても、このような攻撃に対する解決方法は、PeerBlockにてIPを遮断するのが良さそうだ。


Xampp版MariaDB(MySQL)のPassword設定

現在の最新版はXampp7.1.11、MariaDB10.1.28(MySQL)で、Upgradeの度にPasswordの設定でエラーが出たりと戸惑う。securityの項目が無いので注意が必要で、ウエブサイトがWordPress+MySQLなので、最初にMariaDB(MySQL)のPassword設定から始める。

【MySQLのrootのパスワードの設定】

①コマンドプロンプトを開いて、「cd xampp\mysql\bin」を入力
②「mysqladmin -u root password xx(パスワード)xx」と入力
③confing.inc.phpを開いて、以下の項目を探す、無ければ追記
$cfg[”Servers’][$i][‘user’] = ‘root’; ➡ローカルホスト
$cfg[‘Servers’][$i][‘password’] = ” “; ➡設定したパスワード
④「mysql/binのmy.iniを開いて以下の項目を探す
#password = xxxxx ➡#を削除、パスワードを記入

本来はxamppのコントロールパネルからMySQLの「Admin」をクリックして、phpmyadminの設定画面でPasswordを設定すべきだと思うけど、何故か失敗するので独自の方法で解決した。


自宅サーバで構築してるウエブサイトのHTTPS証明書

自宅サーバのウェブサイトではサイトが安全でなければと考えていたので、取り合えずOpenSSLでPrivate(CA)なるものを作って公開した。ところがGoogleで「信頼できる機関が発行した証明書を使用することをウェブサイトの要件にする」と言うことで突然に警告が表示されるようになったのだ。
そんなおり、非営利団体による発行元「Lets Encrypt」で無償のSSL証明書発行サービスがあって、Windowsサーバ(IIS)以外でも提供してることを知った。

【準備】

Windows用の「letsencrypt-win-simple」「githubからダウンロード、任意のディレクトリ(Xampp内)に解凍して、フォルダー内のLetsencrypt.exeをクリックして申請する。

【申請】

フォルダー内のletsencrypt.exeをダブルクリックするとコマンドプロンプトが起動して申請書的な文書が現れるので聞かれる問いに答えていく。
1.PublicのEmailでなく、しっかり受け取れるメールを入力。
2.利用規約に同意するか?⇒当然同意なので「y」を入力。
3.手動で証明書を生成することになるので「M」を入力。
4.サイトのドメイン名(Full)を入力。
5.apacheの設定ファイルに記載されてるDocumentRoot/wordpressまでを記入。
6.タスクスケジューラに登録しないので「No」で申請終了!

【Letsencryptの証明書】

Letsencrypt」からアクセスが来て、サイトの認証がなされ秘密鍵、公開鍵証明書、中間CA証明書が「c:\Users\user名\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\」に沢山のファイルと共にWordPressのディレクトリに.well-knownというフォルダーがアップロードされて終了する。

【WordPress(Apache)へ設定】

1.httpd.confのAriasに追記
Alias /.well-known “DocumentRoot/wordpress/.well-known”
2.httpd-ssl.confの<virtualhost:*443>欄の下部に追記
RewriteEngine On
# Redirect to the correct domain name
RewriteCond %{HTTP_HOST} !^サイトのドメイン名$ [NC]
RewriteRule ^/?(.*)$ サイトのドメイン名(Full)/$1 [NE,L,R=301]
3. 次に各証明書をapacheのhttpd-ssl.confに設定する。
a.SSLCertificateFile “Fullパス/ドメイン名-crt.pem”
b.SSLCertificateKeyFile “Fullパス/ドメイン名-key.pem”
c.SSLCertificateChainFile “Fullパス/ca-XXXXXXXXXX.pem”
*FullパスはLetsencryptの証明書が入ってるディレクトリ/

これですべき準備が完了したのでXamppのcontroll panelの apacheを再起動、問題がなければ「HTTPS」でアクセスOK!

【Windowsのregeditを開いてチェック】

PC\HKEY_CURRENT_USER\Software\letsencrypt-win-simple\https://acme-v01.api.letsencrypt.org/で詳細が分かる。

【指定された日以降に更新】

Renewal Date以降に、コマンドプロンプト(管理者権限)を開き手動で(–renewコマンド)更新する。
letsencrypt.exe –renew –baseuri “https://acme-v01.api.letsencrypt.org/”

耳寄りな情報:Lets Encryptのサイトで発見したが、来年1月から「ワイルドカード(SAN)でクライアント証明書の発行」とのこと、思い描いてるワイルドカード(*.osshinet.com)も取得できるのであれば、MailやFTPサーバにも利用可能になると思うけど。


代替え用PCで自宅サーバ

自宅サーバのPowerEdgeSC440がフリーズしているのを発見、電源を手動でOFF/ONしたところ何故か「自動修復の準備中」でストップ。Windows10のシステムの修復DVDでトライしても暫くすると自動で電源が切れてしまう。

復旧できるまでの応急処置にとAmazonでWin10 フェアーの中古品「Office 2016 Dell 790 Core i5 8GB 500GB」を購入して代替え用の自宅サーバを立ち上げることにした。

新たな自宅サーバの準備に手間取ったが、サーバ用のXamppは最新のXampp 7.1.11/PHP 7.1.11をインストールした。

includes: Apache 2.4.29, MariaDB 10.1.28, PHP 7.1.11, phpMyAdmin 4.7.4, OpenSSL 1.0.2, XAMPP Control Panel 3.2.2, Webalizer 2.23-04, Mercury Mail Transport System 4.63, FileZilla FTP Server 0.9.41, Tomcat 7.0.56 (with mod_proxy_ajp as connector), Strawberry Perl 7.0.56 Portable

ある程度の資料やソフトが揃ってたので難なく復旧できが、次のステップのWordPressサイト立ち上げで頭を悩ませそうだ。