質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

3532閲覧

Google Apps Scriptを利用したSSL証明書有効期限確認ツールについて

Masa_Nishi

総合スコア10

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2019/05/22 07:43

編集2019/05/23 04:55

前提・実現したいこと

GAS(Google Apps Script)を利用してスプレッドシートに記載されたURLのSSL証明書の有効期限をチェックする
ツールを作成しています。
現在作成しているスクリプトは外部サイトを利用してチェックする形を取っているのですが、外部サイトだといつ
サービスが終了するかという点と、稀にエラーが返される場合があり、可能であれば外部サイトを利用せずにGAS
内で完結させるスクリプトを作成したいと考えているのですがGAS(JavaScript)にてSSL証明書の情報(有効期限)
を取得することは可能でしょうか?
※外部サイトの担当者の方から利用許可は頂いております。

該当のソースコード

現状のソースコードの抜粋です。

Google

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を利用しているため外部からの
アクセスができないことが判明・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

結局GAS単独での実行はあきらめ、Lambdaを利用してopensslコマンドの実行結果を返す形を取ることにしました。

投稿2019/05/24 02:11

編集2019/05/24 02:14
Masa_Nishi

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/24 02:15

GAS単独でできても良さそうですけどねぇ。 お疲れ様でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問