SSL証明書の有効期限の確認をWindowsで行う
定期的にWEBサイトのSSL証明書の有効期限を確認してメールなどでレポートしたい。
なのでコマンドラインやスクリプト等でチェックできないか。
コマンドで
Linuxの場合だと
下記の様にopensslでコマンドが実行できる。
$ openssl s_client -connect example.com:443 < /dev/null 2> /dev/null | openssl x509 -text | grep Not
Not Before: Sep 25 09:14:02 2014 GMT
Not After : Oct 27 09:49:54 2017 GMT
Not Afterの後が有効期限
Windows用のopensslバイナリがあるのでインストールしてみる。
http://www.digicert.ne.jp/howto/basis/openssl_on_windows.html
https://jp.globalsign.com/support/faq/177.html
下記のサイトの場所からWin32 OpenSSL v1.0.1L Light
をダウンロードして
http://slproweb.com/products/Win32OpenSSL.html
下記の場所にインストールされるようにしてみた。
C:\OpenSSL-Win32\bin
先ほどのLinuxのコマンドを Windows用に書き換える。
/dev/null → nul
grep → findstr
:: binディレクトリに移動
cd C:\OpenSSL-Win32\bin
:: OPENSSL_CONFの環境変数をセットしないとアラートが出る。システム環境変数にセットでもOK
set OPENSSL_CONF=C:\OpenSSL-Win32\bin\openssl.cnf
:: Not Afterの後が有効期限
openssl s_client -connect example.com:443 < nul 2> nul | openssl x509 -text | findstr Not
Not Before: Sep 25 09:14:02 2014 GMT
Not After : Oct 27 09:49:54 2017 GMT
:: ファイルに出力の場合はリダイレクトを追加
openssl s_client -connect example.com:443 < nul 2> nul | openssl x509 -text | findstr Not > c:¥xxx¥xxxx.txt
このコマンドを定期的に実行してファイルを書き込み、後続の処理でファイルを読み込んで、アラートを投げれば良いか。
PowerShellの場合
Powershell等でもできそうな気がするので、調べてみることにする。
※それっぽいのがあったので、後で調べる。
http://www.zerrouki.com/checkssl/
http://myitpath.blogspot.jp/2010/03/checking-ssl-cert-values-with.html
上記のサイトが正にその通りでした。
WEBサイトのSSL証明書の有効期限をチェックして、一定日数前になるとメールを出すPowershellのようです。
例外処理とか、標準出力の部分を除いて簡単にすると下のような感じ。
# WEBサーバ
$WebsiteURL="example.com"
# ポート
$WebsitePort=443
# コモンネーム
$CommonName="example.com"
# 閾値日数
$Threshold="15"
# 宛先メール
$MailTo="[email protected]"
# メール件名
$MailSubject="$WebsiteURL - SSL証明書が $ValidDays 日で失効します"
#送信メール
$MailFrom="[email protected]"
#送信メールサーバ
$SmtpServer="mailserver.example.com"
#メール本文
$MailBody=@"
WEBサイト "$WebsiteURL"のSSL証明書 は $ValidDays 日内に有効期限が切れます。
"@
# TCP/IP接続
$Conn = New-Object System.Net.Sockets.TcpClient($WebsiteURL,$WebsitePort)
# SSL通信開始
$Stream = New-Object System.Net.Security.SslStream($Conn.GetStream())
# 証明書の検証を行う
$Stream.AuthenticateAsClient($CommonName)
# 証明書の取得
$Cert = $Stream.Get_RemoteCertificate()
# 証明書の失効日を取得
$ValidTo = [datetime]::Parse($Cert.GetExpirationDatestring())
# 現在から失効日までの日数を取得
$ValidDays = $($ValidTo - [datetime]::Now).Days
if ($ValidDays -lt $Threshold)
{
# 残り日数が閾値日数未満の場合
# 失効日を標準出力
Write-Host "証明書失効日: $ValidTo`n" -ForegroundColor Yellow
# アラートメールを送信
Send-MailMessage -To $MailTo -Subject $MailSubject -From $MailFrom -SmtpServer $SmtpServer -Priority High -BodyAsHtml $MailBody
}
else
{
# 失効日を標準出力
Write-Host "証明書失効日: $ValidTo`n" -ForegroundColor DarkGreen
}
$Conn.close()
PHPの場合
下記の通り
http://qiita.com/suzuki86/items/a971a5cbbcd6179a2695
http://www.pahoo.org/e-soul/webtech/phpsec/phpsec-13-01.shtm
Author And Source
この問題について(SSL証明書の有効期限の確認をWindowsで行う), 我々は、より多くの情報をここで見つけました https://qiita.com/nightyknite/items/c4765697602eab1fb205著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .