前提・実現したいこと
GAS(Google Apps Script)を利用してスプレッドシートに記載されたURLのSSL証明書の有効期限をチェックする
ツールを作成しています。
現在作成しているスクリプトは外部サイトを利用してチェックする形を取っているのですが、外部サイトだといつ
サービスが終了するかという点と、稀にエラーが返される場合があり、可能であれば外部サイトを利用せずにGAS
内で完結させるスクリプトを作成したいと考えているのですがGAS(JavaScript)にてSSL証明書の情報(有効期限)
を取得することは可能でしょうか?
※外部サイトの担当者の方から利用許可は頂いております。
該当のソースコード
現状のソースコードの抜粋です。
1//SSL証明書有効期限監視処理 2function get_ssl_expired(str) { 3 //下記文字列(例)から有効期限部分のみを切り取る(2019/08/04 15:17:57) 4 //<p>有効期限:2018/08/03 15:17:57 JST - 2019/08/04 15:17:57 JST 5 //reg(<p>有効期限:.*)にヒットする有効期限記載部分の34文字目から50文字目までを抽出 6 var reg = /<p>有効期限:.*/; 7 return str.match(reg)[0].slice(34,50); 8} 9 10function checkExpiredDate() { 11 // 取り扱いたいスプレッドシートのURLを取得する 12 var spreadSheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/***/edit#gid=0'); 13 //URL一覧シートを取得 14 var sheet = spreadSheet.getSheetByName('URL一覧'); 15 //最終行を取得 16 var lastRow = sheet.getLastRow(); 17 //各URLに対して有効期限を確認する 18 var today = new Date(); 19 //メール通知用の変数(message)宣言 20 var message = "URL\t有効期限\t残日数\n---------------------------------------------------------\n"; 21 //セル内を順次処理する 22 for(var i = 2; i <= lastRow; i++) { 23 //各行1列目の値(URL)を取得 24 var url = sheet.getRange(i, 1).getValue(); 25 if(url){ 26 //SSL証明書有効期限監視のURLを生成(外部サイト) 27 var url_org = "https://www.en-pc.jp/tech/checkssl.php?hostname=" + url ; 28 //取得したURLから応答内容を取得 29 try{ 30 var str = UrlFetchApp.fetch(url_org).getContentText(); 31 }catch(e){ 32 //エラー発生時に処理をスキップする 33 sheet.getRange(i, 3).setValue('有効期限取得時にエラーが発生しました。管理者へ連絡してください。'); 34 sheet.getRange(i, 4).setValue('-'); 35 //エラー発報の旨メール送信 36 message += 'https://' + url + '\t' + '有効期限取得時にエラーが発生しました。管理者へ連絡してください。\n'; 37 continue ; 38 } 39 //取得した応答内容に「<p>有効期限:」が存在するかどうかを確認 40 if(str.match(/<p>有効期限:/)){ 41 //有効期限日を取得する(function get_ssl_expired) 42 var expired_date = new Date(get_ssl_expired(str)); 43 }else{ 44 //有効なURLでない場合セルにN/Aを記載する。 45 sheet.getRange(i, 3).setValue('N/A'); 46 sheet.getRange(i, 4).setValue('N/A'); 47 message += 'https://' + url + '\t' + 'N/A' + '\t' + '存在しないURLです。\n'; 48 continue ; 49 } 50 // getTimeメソッドで経過ミリ秒を取得し、2つの日付の差を求める 51 var msDiff = expired_date.getTime() - today.getTime(); 52 // 求めた差分(ミリ秒)を日付へ変換(経過ミリ秒÷(1000ミリ秒×60秒×60分×24時間)。端数切り捨て) 53 var daysDiff = Math.floor(msDiff / (1000 * 60 * 60 *24)); 54 //有効期限日をスプレッドシートに入力する 55 sheet.getRange(i, 3).setValue(expired_date); 56 //残日数をスプレッドシートに入力する 57 sheet.getRange(i, 4).setValue(daysDiff); 58 //有効期限が45日を切っているものについてメール送信する 59 if(daysDiff <= 45){ 60 message += 'https://' + url + '\t' + Utilities.formatDate(expired_date, 'Asia/Tokyo', 'yyyy/M/d HH:mm') + '\t' + daysDiff + '日前' + '\t' + sheet.getRange(i, 6).getValue() + '\n'; 61 } 62 } 63 } 64 //メール送信処理 65 if(message.length > 0) { 66 var dAddress = '****@****.co.jp'; 67 var subject = 'SSL証明書有効期限監視アラート'; 68 GmailApp.sendEmail(dAddress,subject,message); 69 } 70};
追記
doPOSTを利用して外部サーバからcurlの実行結果をPOSTすることで実現できないかと考えましたが、GSuiteを利用しているため外部からの
アクセスができないことが判明・・・
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/24 02:15