プログラミングの質問に変えてみませんか! このコード (C#) を使用することもできますが、少し変更して (たとえば、URL をファイルに入れる)、サービスにスローすることをお勧めします。
このコードは、HttpWebRequest が証明書に遭遇するたびに呼び出す証明書検証コールバックを設定します。これにより、証明書を確認できます。通常、これは証明書を検証するために使用されますが、有効期限を確認し、3 か月以内であれば自分自身に電子メールを送信します。タイマーは、チェックを 1 日 1 回実行するように設定されています。
using System.Net;
using System.Diagnostics;
using System.Net.Mail;
using System.Threading;
static void Main(string[] args)
{
// List of URL's to check
string[] urls = new string[]{
"https://www.6bit.com/",
"https://www.google.com/"
};
HttpWebRequest req = null;
// Certificate check callback
ServicePointManager.ServerCertificateValidationCallback = (state, cert, certChain, sslerr) =>
{
DateTime expiration = DateTime.Parse(cert.GetExpirationDateString());
if (expiration < DateTime.Now.AddMonths(3))
{
Debug.WriteLine("Cert expiring on " + expiration.ToShortDateString());
MailMessage msg = new MailMessage("SSLCheck@example.com", "josh@example.com", "SSL Certificate Expiring", "The ssl certificate for" + req.RequestUri.ToString() + " will expire on " + expiration.ToShortDateString());
SmtpClient sc = new SmtpClient();
sc.Send(msg);
}
return true;
};
// Request each url once a day so that the validation callback runs for each
Timer t = new Timer(s =>
{
Array.ForEach(urls, url =>
{
try
{
req = (HttpWebRequest)HttpWebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
resp.Close();
}
catch (Exception ex)
{
Debug.WriteLine("Error checking site: " + ex.ToString());
}
});
}, null, TimeSpan.FromSeconds(0), TimeSpan.FromDays(1)); // Run the timer now and schedule to run once a day
}