rabbit51

it's since Nov.30 2005
May.29 2014, transferred from broach

Synology DS-216Jのnginx+phpから標準インストール済PostgreSQLを使う

2023-10-01 16:00:00 | DS-216J
Synology DS-216Jには、「Hyper Backup」「Web station」「Synology Photo」(「Node.js v12」「PHP7.4」「PHP 7.0」)「Phyton2」を追加でインストールしている。PHP 7.4/7.0は、Synology Photoをインストールした時に依存パッケージとしてインストールされた記憶がある。Phyton2は、何かのスクリプトを動かすのにインストールした記憶。
Synology DS-220Jは、「Hyper Backup」「Hyper Backup Vault」「Web station」「PHP7.4」「Phyton2」を追加インストールしてある。PHP 7.4とPyton2は、DS-216Jに合わせた記憶がある。
両機種共に標準でHTTPサーバーにnginx、CGI用スクリプトにPHP、SQLデータベースにPostgreSQLがインストールされている。
磁気ディスク状態の警告を受けたため2021年11月にDS216JからDS220Jへ移行した。データ移行後磁気ディスクからの警告が出なくなったのでHTTPサーバーとして利用している。このHTTPサーバーは、Let's Encryptからサーバー証明書を得て、MyDNSのDynamicDNSにIPv4(Aレコード)とIPv6(AAAAレコード)を登録し、PPPoE IPv4アドレスとNGN IPv6 IPoE経由でアクセスが出来る。
同窓会の「出欠確認受付」をnginx+php+postgresqlを使いこのサーバーで受けるよう設定してみた。

(1)nginx/php/postgresqlのバージョン
DS-216J DSM 7.1.1-42962 Update 5
$ nginx -v
nginx version: nginx/1.20.1
----
$ php -v
PHP 7.3.3 (cli) (built: Oct  7 2021 06:18:21) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.3, Copyright (c) 1998-2018 Zend Technologies
--
$ php74 -v
PHP 7.4.30 (cli) (built: Oct 13 2022 15:45:32) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
----
$ psql -V
psql (PostgreSQL) 11.11
DS-220J DSM 7.2-64570 Update 1
$ nginx -v
nginx version: nginx/1.23.1
----
$ php -v
PHP 8.1.9 (cli) (built: Dec  6 2022 02:51:27) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.9, Copyright (c) Zend Technologies
--
$ php74 -v
PHP 7.4.33 (cli) (built: May  3 2023 10:56:08) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
----
$ psql -V
psql (PostgreSQL) 11.11

(2)postgreSQLの設定
Synology DS215jをWebサーバーにする」を参考にさせて頂いた。
ただ、ネットワーク経由でのアクセスなのとローカルネットワーク上のホストからのアクセスを信頼許可している。
Synologyのアプリは、peer認証を使っている。DS-216J内からだけpostgreSQLを使うのでpeer認証で設定してみた。

(A)ユーザアカウントでsshログインが出来るよう「コントロールパネル」「ユーザーとグループ」「グループ」「administrators」にユーザーアカウントを追加する(sshが利用できる前提)。

(B)データベースとデータベースアカウントを作る
DB名: YAMAZAKIJH
DBユーザ名:yamazaki
ssh user@ds216j
user@ds216j:~$ sudo -s
Password: -user's password-
root@ds216j:~# su - postgres

---- SQLデータベース用アカウントを作る
postgres@ds216j:~$createuser -P yamazaki
Enter password for new role: himitsunokotoba
Enter it again: himitsunokotoba

---- SQLデータベースを作る
postgres@ds216j:~$ createdb -O yamazaki -E UTF8 -T template0 --lc-collate=ja_JP.UTF8 --lc-ctype=ja_JP.UTF8 YAMAZAKIJH

---- SQLデータベースを確認
postgres@ds216j:~$psql
psql (11.11)
Type "help" for help.

postgres=# \du yamazaki
           List of roles
 Role name | Attributes | Member of 
-----------+------------+-----------
 yamazaki  |            | {}

postgres=# \l "YAMAZAKIJH"
                               List of databases
    Name    |  Owner   | Encoding |  Collate   |   Ctype    | Access privileges 
------------+----------+----------+------------+------------+-------------------
 YAMAZAKIJH | yamazaki | UTF8     | ja_JP.UTF8 | ja_JP.UTF8 | 
(1 row)
(3)postgreSQLのpeer認証
peer認証用のmapをmap名pg_yamazakiと定義する。
/etc/postgresql/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   YAMAZAKIJH      yamazaki                                peer map=pg_yamazaki
local   all             postgres                                peer map=pg_root
local   all             all                                     peer
ident名とpostgreSQLユーザ名をmap名定義で一致させる
/etc/postgresql/pg_ident.conf
PNAME     IDENT-USERNAME    PG-USERNAME
pg_root       root              postgres
pg_root       postgres          postgres
pg_yamazaki   root              yamazaki
pg_yamazaki   user             yamazaki
pg_yamazaki   http              yamazaki
「http」は、phpスクリプトがnginx配下でpostgreSQLをアクセスする時のユーザ名/グループ名

(3)nginx+phpでpostgreSQLテスト
nginxからphpのcgiにアクセスし、postgreSQL接続とアクセスを確認する
testdb.php
<?php
 $con=pg_connect(" dbname=YAMAZAKIJH user=yamazaki");
	echo $con . '';
	$result=pg_query($con, "select * from pg_stat_activity");
	var_dump(pg_fetch_all($result));
	pg_close($con);
?>



(4)Table生成とデータ取込み
addressテーブルの生成
YAMAZAKIJH=> create table address(uid serial,no numeric,kana varchar(16),name varchar(16),maden varchar(4),class char(1),memo text,postal char(8),address varchar(64),phone varchar(13),facsimile varchar(13),mobile varchar(13),email varchar(48),email2 varchar(48));
CREATE TABLE
addressテーブルの確認
YAMAZAKIJH=> \d
               List of relations
 Schema |      Name       |   Type   |  Owner   
--------+-----------------+----------+----------
 public | address         | table    | yamazaki
 public | address_uid_seq | sequence | yamazaki
(2 rows)

YAMAZAKIJH=> \d address
                                     Table "public.address"
  Column   |         Type          | Collation | Nullable |               Default                
-----------+-----------------------+-----------+----------+--------------------------------------
 uid       | integer               |           | not null | nextval('address_uid_seq'::regclass)
 no        | numeric               |           |          | 
 kana      | character varying(16) |           |          | 
 name      | character varying(16) |           |          | 
 maden     | character varying(4)  |           |          | 
 class     | character(1)          |           |          | 
 memo      | text                  |           |          | 
 postal    | character(8)          |           |          | 
 address   | character varying(64) |           |          | 
 phone     | character varying(13) |           |          | 
 facsimile | character varying(13) |           |          | 
 mobile    | character varying(13) |           |          | 
 email     | character varying(48) |           |          | 
 email2    | character varying(48) |           |          | 
テーブルにデータをインポート
YAMAZAKIJH=> \copy address(no,kana,name,maden,class,memo,postal,address,phone,facsimile,mobile,email,email2) from '/volume1/homes/user/address.csv' with encoding 'UTF8' csv Header;
COPY 143
CSVファイルは、Excellで作成。保存時にファイルの種類を「CSV UTF-8(コンマ区切り)で書き出したファイルをインポートした。postgreSQLで書き出したUTF-8のcsvは、データ・外部データの取り込みで取り込む。
addressテーブルのuidにunique制約を付加する
YAMAZAKIJH=> alter table address add unique (uid);
ALTER TABLE
YAMAZAKIJH=> \d address
                                     Table "public.address"
  Column   |         Type          | Collation | Nullable |               Default                
-----------+-----------------------+-----------+----------+--------------------------------------
 uid       | integer               |           | not null | nextval('address_uid_
seq'::regclass)
 no        | numeric               |           |          | 
 kana      | character varying(16) |           |          | 
 name      | character varying(16) |           |          | 
 maden     | character varying(4)  |           |          | 
 class     | character(1)          |           |          | 
 memo      | text                  |           |          | 
 postal    | character(8)          |           |          | 
 address   | character varying(64) |           |          | 
 phone     | character varying(13) |           |          | 
 facsimile | character varying(13) |           |          | 
 mobile    | character varying(13) |           |          | 
 email     | character varying(48) |           |          | 
 email2    | character varying(48) |           |          | 
Indexes:
    "address_uid_key" UNIQUE CONSTRAINT, btree (uid)
upsertの確認
YAMAZAKIJH=> select uid,name,memo from address where uid=116;
 uid |    name    | memo 
-----+------------+------
 116 | 山崎 太郎 | 
(1 row)

YAMAZAKIJH=> insert into address (uid,memo) values (116,'連絡先非公開') on conflict (uid) do update set uid=116,memo='連絡先非公開';
INSERT 0 1
YAMAZAKIJH=> select uid,name,memo from address where uid=116;
 uid |    name    |     memo     
-----+------------+--------------
 116 | 山崎 太郎 | 連絡先非公開
(1 row)

YAMAZAKIJH=> insert into address (uid,memo) values (116,'') on conflict (uid) do update set uid=116,memo='';
INSERT 0 1
YAMAZAKIJH=> select uid,name,memo from address where uid=116;
 uid |    name    | memo 
-----+------------+------
 116 | 山崎 太郎 | 
(1 row)


(5)phpからPostgreSQLをアクセス




 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Let's Encrypt証明書の発行時刻と有効期間の時刻が1時間ズレている

2023-08-11 16:00:00 | DS-216J
Synology DS-216JでLet's Encryptの更新不具合」に「コメント(1時間のずれ)」が寄せられた。調べるのをすっかり忘れていた。

(1)状況
Synology DS-216JでLet's Encryptの更新不具合で更新処理した時刻と発行された証明書の有効期間の時刻(Not Before)で1時間の差がある。発行された証明書のSCT(Signed Certificate Timestamps)の時刻は、更新処理した時刻となっている。

(2)Signed Certificates Timestampを調べてみる
Certificate Transparency ~証明書の透明性とは何か〜(2016/4/22)」によるとこの時点でLet's Encryptは、Logサーバに登録はするけど証明書には埋め込まないと書かれている。

Engineering deep dive: Encoding of SCTs in certificates(Apr 4, 2018 )」でLet's Encryptは、SCTを証明書に埋め込むとアナウンス。

crt.shでlogを調べてみる

Synology DS-216JでLet's Encryptからサーバ証明書(Free)を得る」で最初に証明書を得たのが「2017/11/30」で「2018/2/3」の更新までLog登録は「PreCertificte」無しでSCTの埋め込みも無い。この時すでに証明書発行時刻とLog登録時刻に1時間の差が存在する。
2018/4のSCT埋込アナウンス後、「PreCertificte」のLog登録も行われ、証明書にSCTが埋め込まれるようになった。

(3)PreCertificateとCertificate
Synology DS-216JでLet's Encryptの更新不具合」で更新された後に発行された2019/5/31の証明書をLogから確認してみた。

PreCertificate(2019/5/31 09:51:29)

申請のあった時刻より1時間前から有効期限が始まる証明書を発行し、 CT Precertificate Poison( 1.3.6.1.4.1.11129.2.4.3 )でLogサーバに登録しSCTを得る。
Logサーバーに登録してSCTをえた時刻: 2019/05/31 09:51:30 GMT
証明書の有効開始時刻: 2019/05/31 08:51:29 GMT

Certificate(2019/5/31 09:51:30)

PreCertificateをLogサーバーに登録して得たSCTを証明書に埋込後CA署名し発行する。シリアル番号、有効期限などの情報変更なし。

LogIDは、Logサーバーの公開鍵(DER)をSHA256ハッシュした値。
certificate-transparency-community-site」にある「The list of all known and announced CT Logs」の「log_id」からLogサーバーの情報が得られる。
証明書内の「CT Precertificate SCTs」にある最初のサーバーのLog_ID「74:7E:DA:83:31:AD:33:10:91:21:9C:CE:25:4F:42:70:C2:BF:FD:5E:42:20:08:C6:37:35:79:E6:10:7B:CC:56」をbase64に変換する
$ cat <<EOF | xxd -r -p | openssl enc -base64
> 74:7E:DA:83:31:AD:33:10:91:21:9C:CE:25:4F:42:70:C2:BF:FD:5E:42:20:08:C6:37:35:79:E6:10:7B:CC:56
> EOF
dH7agzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFY=
「dH7agzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFY=」でリストを検索すると
{
          "description": "Cloudflare 'Nimbus2019' Log",
          "log_id": "dH7agzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFY=",
          "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkZHz1v5r8a9LmXSMegYZAg4UW+Ug56GtNfJTDNFZuubEJYgWf4FcC5D+ZkYwttXTDSo4OkanG9b3AI4swIQ28g==",
          "url": "https://ct.cloudflare.com/logs/nimbus2019/",
          "mmd": 86400,
          "state": {
            "rejected": {
              "timestamp": "2020-02-07T00:00:00Z"
            }
          },
          "temporal_interval": {
            "start_inclusive": "2019-01-01T00:00:00Z",
            "end_exclusive": "2020-01-01T00:00:00Z"
          }
        }
が得られる。
「https://ct.cloudflare.com/logs/nimbus2019/」は、2020/2/7にクローズされ「Not Found」状態。

現在有効な証明書で確認してみる

SCTの最初のログサーバー
Key_ID=7A 32 8C 54 D8 B7 2D B6 20 EA 38 E0 52 1E E9 84 16 70 32 13 85 4D 3B D2 2B C1 3A 57 A3 52 EB 52

$ cat <<EOF | xxd -r -p | openssl enc -base64
> 7A 32 8C 54 D8 B7 2D B6 20 EA 38 E0 52 1E E9 84 16 70 32 13 85 4D 3B D2 2B C1 3A 57 A3 52 EB 52
> EOF
ejKMVNi3LbYg6jjgUh7phBZwMhOFTTvSK8E6V6NS61I=
-------------------
{
          "description": "Cloudflare 'Nimbus2023' Log",
          "log_id": "ejKMVNi3LbYg6jjgUh7phBZwMhOFTTvSK8E6V6NS61I=",
          "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEi/8tkhjLRp0SXrlZdTzNkTd6HqmcmXiDJz3fAdWLgOhjmv4mohvRhwXul9bgW0ODgRwC9UGAgH/vpGHPvIS1qA==",
          "url": "https://ct.cloudflare.com/logs/nimbus2023/",
          "mmd": 86400,
          "state": {
            "usable": {
              "timestamp": "2019-10-31T19:22:00Z"
            }
          },
          "temporal_interval": {
            "start_inclusive": "2023-01-01T00:00:00Z",
            "end_exclusive": "2024-01-01T00:00:00Z"
          }
        }

https://ct.cloudflare.com/logs/nimbus2023/


(3)まとめ
Let's EncryptがPreCertificateを生成する時、更新時刻より1時間前の時刻を有効期間の開始時刻として生成するため。

 

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Synology DS-216JでLet's Encrypt証明書にSAN(Subject Alt Name)を追加する

2022-08-17 09:00:00 | DS-216J
使用機材:Synology DS-216J (DSM 7.1-42661 Update 3)
Synology DS-216JでLet's Encryptからサーバ証明書(Free)を得る」で「xxxx.yy.netvolante.jp(IPv4)」HTTPサーバーを稼働。DDNSは、NVR510からネットボランチDDNSを使用。
Synology DS-216JのWebStationを「ぷらら」IPv6 IPoEでアクセス」で「xxxx.mydns.jp(IPv6)」HTTPサーバーを稼働し、「Synology DS-216JのDDNSでIPv6 AAAAレコードを登録する」でxxxx.mydns.jpドメイン名をDDNS登録している。
IPv4でのhttp/https接続は、ぷららのIPv4 PPPoE接続で受け、firewallでnginx@DS-216Jのhttp/1080ポートとhttps/1443ポートへNATしている。
IPv6でのhttp/https接続は、ぷらら/Transix接続で受け、firewall(PR-600MIとNVR510)を介してnginx@DS-216Jのhttp/80ポートとhttps/443ポートへ接続させている。
DDNSでは、「xxxx.mydns.jp」に「A」と「AAAA」レコードを登録し、IPv4とIPv6で接続出来るよう設定している。IPv4アドレスで接続するとぷららのIPv4 PPPoE経由で接続し、仮想サーバー「xxxx.mydns.jp:1080/1443」が「Web services is only for IPv6 users」を表示するようにしている。
「xxxx.mydns.jp」のLet's Encryptサーバー証明証は、「CN=xxxx.mydns.jp」で自動的に設定された「SAN=xxxx.mydns.jp」と共に発行されている。


(1)xxxx.mydns.jpに別名接続出来るようDDNSに別名を登録
「xxxx.mydns.jp」サーバーに「www.xxxx.mydns.jp」でIPv6/IPv4接続出来るようにし、「www.v4.xxxx.mydns.jp」でIPv4接続するよう構成した。「www.v4.xxxx.mydns.jp」を構成した理由は、「www.xxxx.mydns.jp」「xxxx.mydns.jp」へのIPv4接続をブラウザから確認するのが困難なため、「www.v4.xxxx.mydns.jp」でこのサーバーにIPv4接続させるよう構成した。
「www.xxxx.mydns.jp(IPv6/IPv4)」と「www.v4.xxxx.mydns.jp(IPv4)」ドメインは、OpenWrtのDDNSで登録した

nginx設定は、server_nameに別名を追加した。httpsは、証明書確認を無視して接続だけを確認。

(2)Let'sEncrypt証明証にSANを追加する
発行済みのLet's Encrypt証明書にSANを追記出来ないので、新たにFQDNを追加したSANで新規発行する必要がある。有効期限の更新と同様の方法で発行済証明書の廃棄手続きは不要。発行済証明書は、有効期限が過ぎると無効になる。

DS-216Jのコントロールパネルで「セキュリティ」「証明書」を選び、「追加」を実行する
「既存の認証を置き換える」を選択し、置き換えるサーバー「xxxx.mydns.jp」を選択する


「Let's Encryptから証明書をお受け取りください」を選ぶ


「ドメイン名:xxxx.mydns.jp」「電子メール」「サブジェクトの別名」(SAN)を設定する
「サブジェクトの別名」が指定されていないとドメイン名がCNに設定され、SANにも設定される。
「サブジェクトの別名」には、CN対象ドメイン名と追記のSANを「;」で区切って設定した


「www.v4.xxxx.mydns.jp」は、http/80に「.well-known/acme-challenge」が存在しないこ事か、ssl/443が応答しない事が原因で証明書発行が失敗した。この「www.v4.xxxx.mydns.jp」にはサーバ証明書が不要。サーバー実態が無いと証明書発行しないという事のようだ。


「www.v4.xxxx.mydns.jp」を除いて追加処理


追加された

「/usr/syno/etc/certificate/_archive」の既存サーバー用ディレクトリ内に上書きされるため、SAN追記前のサーバー証明書ファイルは破棄される。確保すには、置き換え指定をしないかコピー保存しておく必要がある。

(3)サーバー確認
証明証の「更新」や「追加」後、自動でnginxの証明書入替が行われない。
再起動かnginxのreloadが必要。
sshでログインして「nginx -s reload」でサーバー証明書の入替を行う。

「http://xxxx.mydns.jp/」はリダイレクトされ「https://xxxx.mydns.jp」へIPv6接続


使用されたサーバー証明書(SANにxxxx.mydns.jpとwww.xxxx.mydns.jp)


「http://www.xxxx.mydns.jp/」はリダイレクトされ「https://www.xxxx.mydns.jp」へIPv6接続


IPv4接続にするためブラウザのIPv6接続を禁止設定する


「https://xxxx.mydns.jp/」と「http://xxxx.mydns.jp」へIPv4接続


「https://www.xxxx.mydns.jp/」と「http://www.xxxx.mydns.jp」へIPv4接続


「http://www.v4.xxxx.mydns.jp」へIPv4接続



 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Synology DS-216J LetsEncrypt 自動更新後のnginxサーバー

2020-03-03 17:00:00 | DS-216J
「DS-216j : DSM 6.2.2-24922 Update 4」
IPv4用サーバーとIPv6用サーバーの「LetsEncrypt証明書」が同時に更新された


LetsEncryptの自動更新後、IPv4サーバーの証明書は、更新前の証明書が使われている


IPv6サーバーの証明書も更新前の証明書が使われている


IPv6サーバーの更新前証明書有効期間が切れた
証明書の「reload」がされない。。。。。
LetsEncryptの自動更新後に、「reload」すれば良いのに。。。。


sshで手動「reload」


更新後のLetsEncrypt証明書が使われるようになった

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Synology DS-216JでLet's Encryptの更新不具合

2019-06-10 17:40:00 | DS-216J
「XXXXXXXX.mydns.jp(IPv6)」と「XXXXXXXX.YYY.netvolante.jp(IPv4)」の証明書有効期限(2019/6/14 JST)が近づき30日以内となりDS-216Jコントロールパネル・セキュリティ・証明書の有効期限日が赤色となった。いつ更新されるのか確認していたが、5月25日にIPv6の証明書が更新され、IPv4の証明書は、更新されていなかった。IPv6用証明書の更新が失敗したメールが届き、コントロールパネルから手動更新した記憶があったため、ログを確認してみた。



Let's Encryptの証明書再取得は、「/usr/syno/sbin/syno-letsencrypt」で実行される
----
sh-4.3# /usr/syno/sbin/syno-letsencrypt --help
Copyright (c) 2003-2019 Synology Inc. All rights reserved.

syno-letsencrypt <command> [<args>]
  new-cert 
      -d [domains]   Domain name to be registed. (required)
      -m [mail]      Email address for contact. (required)
      -s [server]    Let's encrypt directory URL. (optional)
      -c [certid]    Certificat Id. (optional)

  renew-all

  revoke
     -c [cert-path]  revoke a certificat. (required)

For all command, you can add the following arguments for debug.
      -v             Show debug message.
      -vv            Show more debug message.
----
自動更新は毎週設定されているが何故か定期的で無いようだ。weekly random?
--- /usr/syno/etc/synocron.d/syno-letsencrypt.conf
[
   {
      "cmd" : "/usr/syno/sbin/syno-letsencrypt renew-all",
      "name" : "syno-letsencrypt - renew",
      "period" : "weekly",
      "user" : "root"
   }
]
---
/var/log/synocrond-execute.log(syno-letsencryptの実行結果ログ)
/var/log/nginx/access.log(Let's Encryptからのhttpサーバ確認結果ログ)
/var/log/synoservice.log(httpサーバ設定再読込ログ)
これらのログを時系列に並べてみる

前回(2019年3月16日)の自動更新時ログ
「syno-letsencrypt」が実行され、更新対象の証明書が存在すると「更新処理」が始まる。
ブラウザで動くLet's Encryptクライアントを作ってみた」が参考になる。「syno-letsencrypt」は、Let's Encryptからの「HTTP-01」認証を待つ。「port 80」の解放が必須。「port 80」が閉じていて認証に失敗すると、「syno-letsencrypt」は、「DNS-01」認証に切替える。「redirect 80 -> 443」でも問題なく「HTTP-01」認証が行われる。下記ログでは、IPv6用証明書が先に自動更新対象となり「HTTP-01」認証が行われ、ログに残らないが証明書の更新がされ、「httpサーバのreload」で更新されていた。続いてIPv4用証明書が更新された。「httpサーバ設定のreload」の実行タイミングがIPv4サーバへの「HTTP-01」認証より前に実行されることに疑問。その後、「weekly random」に自動更新チェックが行われるが、「有効期限30日前」までは、更新処理が行われない。
--synocrond-execute.log
03-16 04:12:00 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
-- synoservice.log 
2019-03-16T04:12:01+09:00 ds216j builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew: service_reload.c:20 synoservice: reload [nginx].
2019-03-16T04:12:05+09:00 ds216j builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew: service_reload.c:46 synoservice: finish reload [nginx].
--access.log(IPv6)
2600:3000:2710:200::1d - - [16/Mar/2019:04:12:07 +0900] "GET /.well-known/acme-challenge/QplO5L0dXgR9H_pjE3fWqpqZZMSN8PDX3q7wdZ8hheI HTTP/1.1" 301 178 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
2600:3000:2710:200::1d - - [16/Mar/2019:04:12:07 +0900] "https" "GET /.well-known/acme-challenge/QplO5L0dXgR9H_pjE3fWqpqZZMSN8PDX3q7wdZ8hheI HTTP/1.1" 200 87 "http://XXXXXXXX.mydns.jp/.well-known/acme-challenge/QplO5L0dXgR9H_pjE3fWqpqZZMSN8PDX3q7wdZ8hheI" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
-- synoservice.log 
2019-03-16T04:12:09+09:00 ds216j builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew: service_reload.c:20 synoservice: reload [nginx].
2019-03-16T04:12:11+09:00 ds216j builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew: service_reload.c:46 synoservice: finish reload [nginx].
2019-03-16T04:12:16+09:00 ds216j builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew: service_reload.c:20 synoservice: reload [nginx].
2019-03-16T04:12:18+09:00 ds216j builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew: service_reload.c:46 synoservice: finish reload [nginx].
--access.log(IPv4)
66.133.109.36 - - [16/Mar/2019:04:12:20 +0900] "http" "GET /.well-known/acme-challenge/6CAasz2BB2P0EfGj18MZE-1uzYVqyZbbrInQNfvVPUk HTTP/1.1" 301 178 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
66.133.109.36 - - [16/Mar/2019:04:12:21 +0900] "https" "GET /.well-known/acme-challenge/6CAasz2BB2P0EfGj18MZE-1uzYVqyZbbrInQNfvVPUk HTTP/1.1" 200 87 "http://XXXXXXXX.YYY.netvolante.jp/.well-known/acme-challenge/6CAasz2BB2P0EfGj18MZE-1uzYVqyZbbrInQNfvVPUk" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
--synocrond-execute.log
03-24 10:13:31 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
03-30 23:22:47 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
04-03 14:30:51 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
04-08 20:48:08 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
04-18 06:38:49 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
04-28 01:44:00 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
05-04 23:56:55 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
05-09 08:28:02 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
05-13 07:04:13 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
----
2019年3月16日 03:12:06 JSTに生成されたサーバ証明書は、
有効期限: 2019年6月14日 03:12:06 JST
30日前: 2019年5月14日 03:12:06 JST
証明書発行時のタイムスタンプが1時間ズレているのが気になる。。。
----
sh-4.3# openssl x509 -text -noout -in /usr/syno/etc/certificate/_archive/aaaaaa/cert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            03:e7:15:a0:0b:c5:ce:31:1b:ef:3e:a8:87:98:61:95:de:2d
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3
        Validity
            Not Before: Mar 15 18:12:06 2019 GMT
            Not After : Jun 13 18:12:06 2019 GMT
        Subject: CN=XXXXXXXX.YYY.netvolante.jp
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    **:**:........
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                F3:9D:D2:CF:E6:A5:13:DC:39:DC:CE:02:4E:7A:C3:5F:6D:CE:61:88
            X509v3 Authority Key Identifier: 
                keyid:A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1

            Authority Information Access: 
                OCSP - URI:http://ocsp.int-x3.letsencrypt.org
                CA Issuers - URI:http://cert.int-x3.letsencrypt.org/

            X509v3 Subject Alternative Name: 
                DNS:XXXXXXXX.YYY.netvolante.jp
            X509v3 Certificate Policies: 
                Policy: 2.23.140.1.2.1
                Policy: 1.3.6.1.4.1.44947.1.1.1
                  CPS: http://cps.letsencrypt.org

            CT Precertificate SCTs: 
                Signed Certificate Timestamp:
                    Version   : v1(0)
                    Log ID    : **:**:........
                    Timestamp : Mar 15 19:12:06.281 2019 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                **:**:........
                Signed Certificate Timestamp:
                    Version   : v1(0)
                    Log ID    : **:**:........
                    Timestamp : Mar 15 19:12:06.308 2019 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
    Signature Algorithm: sha256WithRSAEncryption
         **:**:........
有効期限30日前以降で「syno-letsencrypt」が実行されたのは、2019年5月25日で下記の結果となった。Let's Encryptからの「HTTP-01」認証前後で「synoservice.log」に「httpサーバ設定の再読込」ログは、記録されていなかった。IPv4サーバの「HTTP-01」認証後に「Unexpect httpcode」のエラー発生記録が残っていた。エラー発生が「httpサーバ設定の再読込」を停止させたのか、システムアップデートで仕様が変更になったのか不明。
----synocrond-execute.log
05-25 20:03:02 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
----access.log(IPv6)
2600:3000:2710:200::1d - - [25/May/2019:20:03:04 +0900] "GET /.well-known/acme-challenge/x0z5LSNhqyI1CmrBny8TDIvxIpWcgzivsqmjRg5BJes HTTP/1.1" 301 162 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
2600:3000:2710:200::1d - - [25/May/2019:20:03:05 +0900] "https" "GET /.well-known/acme-challenge/x0z5LSNhqyI1CmrBny8TDIvxIpWcgzivsqmjRg5BJes HTTP/1.1" 200 87 "http://XXXXXXXX.mydns.jp/.well-known/acme-challenge/x0z5LSNhqyI1CmrBny8TDIvxIpWcgzivsqmjRg5BJes" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
----access.log(IPv4)
66.133.109.36 - - [25/May/2019:20:03:11 +0900] "http" "GET /.well-known/acme-challenge/AlaIVSed-2BgUfxNdZqk3xHiTQXEryk1iRquDgz-iBc HTTP/1.1" 301 162 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
66.133.109.36 - - [25/May/2019:20:03:11 +0900] "https" "GET /.well-known/acme-challenge/AlaIVSed-2BgUfxNdZqk3xHiTQXEryk1iRquDgz-iBc HTTP/1.1" 200 87 "http://XXXXXXXX.YYY.netvolante.jp/.well-known/acme-challenge/AlaIVSed-2BgUfxNdZqk3xHiTQXEryk1iRquDgz-iBc" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
----/var/log/messages.log
2019-05-25T20:03:17+09:00 ds216j builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew: syno-letsencrypt.cpp:351 Failed to renew /usr/syno/etc/certificate/_archive/aaaaaa. {"error":200,"file":"client.cpp","msg":"new-cert: Unexpect httpcode. (new-cert)"}
----

次の自動更新実行を待ってみた。
4日後に実行されたがエラー内容「no valid domain name」が異なる。
----synocrond-execute.log
05-29 03:30:20 running job: builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew with command: /usr/syno/sbin/syno-letsencrypt renew-all as user root
----/var/log/messages.log
2019-05-29T03:30:21+09:00 ds216j builtin-dyn-syno-letsencrypt-syno-letsencrypt - renew: syno-letsencrypt.cpp:351 Failed to renew /usr/syno/etc/certificate/_archive/aaaaaa. {"error":102,"file":"client.cpp","msg":"no valid domain name"}
----

手動で「syno-letsencrypt」をデバッグ実行し確認してみた。
----/var/log/bash_history.log
2019-05-30T15:09:17+09:00 ds216j sh: HISTORY: PID=20397 UID=0 /usr/syno/sbin/syno-letsencrypt renew-all -vv
----synocrond-execute.log
2019-05-30T15:09:18+09:00 ds216j syno-letsencrypt: syno-letsencrypt.cpp:351 Failed to renew /usr/syno/etc/certificate/_archive/aaaaaa. {"error":102,"file":"client.cpp","msg":"no valid domain name"}
----

ブラウザで動くLet's Encryptクライアントを作ってみた」を参考にしながら分析してみたがエラー原因は「?」であった。
「invalid anti-replay nonce ltldAhF-SePLQsPxnwoGJ8b6dIUXSczmDhrwiVmOhuw」であるが、「directory」操作の直後の「new-authz」なので「direcorty」操作結果時の「Reply-nonce(下記青文字)」。しかし、この「Reply-nonce」が「invalid」と言われてはどうにもならない。。。
**********************************
sh-4.3# /usr/syno/sbin/syno-letsencrypt renew-all -vv
DEBUG: Issuer name of certificate. [Let's Encrypt]->[/usr/syno/etc/certificate/_archive/bbbbbb/cert.pem]
DEBUG: cert is not expired. [/usr/syno/etc/certificate/_archive/bbbbbb]
DEBUG: Issuer name of certificate. [Let's Encrypt]->[/usr/syno/etc/certificate/_archive/aaaaaa/cert.pem]
DEBUG: start to renew [/usr/syno/etc/certificate/_archive/aaaaaa].
DEBUG: setup acme url https://acme-v01.api.letsencrypt.org/directory
DEBUG: szUserAgent: [synology_armada38x_ds216j DSM6.2-24922 (DDNS)]
DEBUG: GET Request: https://acme-v01.api.letsencrypt.org/directory
DEBUG: Curl Reply: [200] Header: [HTTP/1.1 200 OK
Server: nginx
Content-Type: application/json
Content-Length: 658
Replay-Nonce: ltldAhF-SePLQsPxnwoGJ8b6dIUXSczmDhrwiVmOhuw
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
Expires: Thu, 30 May 2019 06:07:36 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache
Date: Thu, 30 May 2019 06:07:36 GMT
Connection: keep-alive

] Body: [{
  "key-change": "https://acme-v01.api.letsencrypt.org/acme/key-change",
  "meta": {
    "caaIdentities": [
      "letsencrypt.org"
    ],
    "terms-of-service": "https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf",
    "website": "https://letsencrypt.org"
  },
  "new-authz": "https://acme-v01.api.letsencrypt.org/acme/new-authz",
  "new-cert": "https://acme-v01.api.letsencrypt.org/acme/new-cert",
  "new-reg": "https://acme-v01.api.letsencrypt.org/acme/new-reg",
  "puJR66VWsYI": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417",
  "revoke-cert": "https://acme-v01.api.letsencrypt.org/acme/revoke-cert"
}]
DEBUG: strat to do new-authz for XXXXXXXX.YYY.netvolante.jp
DEBUG: ==> start new authz.
DEBUG: new authz: do new-authz.
DEBUG: Post JWS Request: https://acme-v01.api.letsencrypt.org/acme/new-authz
DEBUG: Post JWS value: {
   "identifier" : {
      "type" : "dns",
      "value" : "XXXXXXXX.YYY.netvolante.jp"
   },
   "resource" : "new-authz"
}

DEBUG: szUserAgent: [synology_armada38x_ds216j DSM6.2-24922 (DDNS)]
DEBUG: Post Request: https://acme-v01.api.letsencrypt.org/acme/new-authz
DEBUG: Post value: {
   "header" : {
      "alg" : "RS256",
      "jwk" : {
         "e" : "AQAB",
         "kty" : "RSA",
         "n" : "m8m---6Nw"
      }
   },
   "payload" : "eyJ---n0K",
   "protected" : "eyJ---fQo",
   "signature" : "fME---6Kg"
}

DEBUG: Curl Reply: [400] Header: [HTTP/1.1 400 Bad Request
Server: nginx
Content-Type: application/problem+json
Content-Length: 149
Boulder-Requester: 25089748
Replay-Nonce: yla9y2w2mtE1TS5e_yRMWPHkDKoWxDvFXGxbaIqNlM8
Expires: Thu, 30 May 2019 06:07:36 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache
Date: Thu, 30 May 2019 06:07:36 GMT
Connection: close

] Body: [{
  "type": "urn:acme:error:badNonce",
  "detail": "JWS has invalid anti-replay nonce ltldAhF-SePLQsPxnwoGJ8b6dIUXSczmDhrwiVmOhuw",
  "status": 400
}]
DEBUG: Not synology DDNS.
DEBUG: DNS challenge failed, reason: {"error":108,"file":"challenge.cpp","msg":"Not synology DDNS."}

DEBUG: Normal challenge failed, reason: {"error":102,"file":"client.cpp","msg":"no valid domain name"}
**********************************

日を置いて再度手動で実行してみたが結果は、「no valid domain name」
----
2019-05-31T14:50:55+09:00 ds216j sh: HISTORY: PID=2652 UID=0 /usr/syno/sbin/syno-letsencrypt renew-all -vv
2019-05-31T14:50:56+09:00 ds216j syno-letsencrypt: syno-letsencrypt.cpp:351 Failed to renew /usr/syno/etc/certificate/_archive/aaaaaa. {"error":102,"file":"client.cpp","msg":"no valid domain name"}
----
2019-05-31T18:31:41+09:00 ds216j sh: HISTORY: PID=9960 UID=0 /usr/syno/sbin/syno-letsencrypt renew-all -vv
2019-05-31T18:31:41+09:00 ds216j syno-letsencrypt: syno-letsencrypt.cpp:351 Failed to renew /usr/syno/etc/certificate/_archive/aaaaaa. {"error":102,"file":"client.cpp","msg":"no valid domain name"}
----

「-vv」だと結果が長いので「-v」で実行してみた
----
2019-05-31T18:37:34+09:00 ds216j sh: HISTORY: PID=9960 UID=0 /usr/syno/sbin/syno-letsencrypt renew-all -v
2019-05-31T18:37:37+09:00 ds216j syno-letsencrypt: syno-letsencrypt.cpp:351 Failed to renew /usr/syno/etc/certificate/_archive/aaaaaa. {"error":200,"file":"client.cpp","msg":"new-cert: Unexpect httpcode. (new-cert)"}
----

?「new-authz」が成功し、「new-certs」を実行している。。。。しかし「/usr/syno/etc/certificate/_archive/aaaaaa/cert.pem」に変化が無かった。
**********************************
sh-4.3# /usr/syno/sbin/syno-letsencrypt renew-all -v
DEBUG: Issuer name of certificate. [Let's Encrypt]->[/usr/syno/etc/certificate/_archive/bbbbbb/cert.pem]
DEBUG: cert is not expired. [/usr/syno/etc/certificate/_archive/bbbbbb]
DEBUG: Issuer name of certificate. [Let's Encrypt]->[/usr/syno/etc/certificate/_archive/aaaaaa/cert.pem]
DEBUG: start to renew [/usr/syno/etc/certificate/_archive/aaaaaa].
DEBUG: setup acme url https://acme-v01.api.letsencrypt.org/directory
DEBUG: GET Request: https://acme-v01.api.letsencrypt.org/directory
DEBUG: strat to do new-authz for XXXXXXXX.YYY.netvolante.jp
DEBUG: ==> start new authz.
DEBUG: new authz: do new-authz.
DEBUG: Post JWS Request: https://acme-v01.api.letsencrypt.org/acme/new-authz
DEBUG: Post Request: https://acme-v01.api.letsencrypt.org/acme/new-authz
DEBUG: new authz: setup challenge env.
DEBUG: ==> finish new-authz
DEBUG: finish to do new-authz for XXXXXXXX.YYY.netvolante.jp
DEBUG: ==> start new-cert.
DEBUG: generate csr & private key
DEBUG: get new-cert
DEBUG: Post JWS Request: https://acme-v01.api.letsencrypt.org/acme/new-cert
DEBUG: Post Request: https://acme-v01.api.letsencrypt.org/acme/new-cer
**********************************

気を取り直して再度「-vv」で実行してみたら「save to file」された。。。
「new-authz」で認知している証明書の有効期限が「2019-06-24T11:01:35Z」と発行された証明書の有効期限「Jun 13 18:12:06 2019 GMT」と異なっている。これが原因かもしれない。
**********************************
sh-4.3# /usr/syno/sbin/syno-letsencrypt renew-all -vv
DEBUG: Issuer name of certificate. [Let's Encrypt]->[/usr/syno/etc/certificate/_archive/bbbbbb/cert.pem]
DEBUG: cert is not expired. [/usr/syno/etc/certificate/_archive/bbbbbb]
DEBUG: Issuer name of certificate. [Let's Encrypt]->[/usr/syno/etc/certificate/_archive/aaaaaa/cert.pem]
DEBUG: start to renew [/usr/syno/etc/certificate/_archive/aaaaaa].
DEBUG: setup acme url https://acme-v01.api.letsencrypt.org/directory
DEBUG: szUserAgent: [synology_armada38x_ds216j DSM6.2-24922 (DDNS)]
DEBUG: GET Request: https://acme-v01.api.letsencrypt.org/directory
DEBUG: Curl Reply: [200] Header: [HTTP/1.1 200 OK
Server: nginx
Content-Type: application/json
Content-Length: 658
Replay-Nonce: IGTmrzH5p5p6rKrOFhNgW_-DoGW-1I4M754lZao-TFI
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
Expires: Fri, 31 May 2019 09:51:23 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache
Date: Fri, 31 May 2019 09:51:23 GMT
Connection: keep-alive

] Body: [{
  "key-change": "https://acme-v01.api.letsencrypt.org/acme/key-change",
  "meta": {
    "caaIdentities": [
      "letsencrypt.org"
    ],
    "terms-of-service": "https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf",
    "website": "https://letsencrypt.org"
  },
  "new-authz": "https://acme-v01.api.letsencrypt.org/acme/new-authz",
  "new-cert": "https://acme-v01.api.letsencrypt.org/acme/new-cert",
  "new-reg": "https://acme-v01.api.letsencrypt.org/acme/new-reg",
  "revoke-cert": "https://acme-v01.api.letsencrypt.org/acme/revoke-cert",
  "sf-ffwWC004": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417"
}]
DEBUG: strat to do new-authz for XXXXXXXX.YYY.netvolante.jp
DEBUG: ==> start new authz.
DEBUG: new authz: do new-authz.
DEBUG: Post JWS Request: https://acme-v01.api.letsencrypt.org/acme/new-authz
DEBUG: Post JWS value: {
   "identifier" : {
      "type" : "dns",
      "value" : "XXXXXXXX.YYY.netvolante.jp"
   },
   "resource" : "new-authz"
}

DEBUG: szUserAgent: [synology_armada38x_ds216j DSM6.2-24922 (DDNS)]
DEBUG: Post Request: https://acme-v01.api.letsencrypt.org/acme/new-authz
DEBUG: Post value: {
   "header" : {
      "alg" : "RS256",
      "jwk" : {
         "e" : "AQAB",
         "kty" : "RSA",
         "n" : "m8m----6Nw"
      }
   },
   "payload" : "eyJ----n0K",
   "protected" : "eyJ----fQo",
   "signature" : "I-6----19g"
}

DEBUG: Curl Reply: [201] Header: [HTTP/1.1 201 Created
Server: nginx
Content-Type: application/json
Content-Length: 1716
Boulder-Requester: 25089748
Link: ;rel="next"
Location: https://acme-v01.api.letsencrypt.org/acme/authz/PCjGD1iNViYKAHptF4sW4GC2n73bNQNLjeX8Zp7s4fY
Replay-Nonce: LfQjDyHRz5mZfvnFAfCrkZXVp6YBt86soVPhSf8bS08
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
Expires: Fri, 31 May 2019 09:51:23 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache
Date: Fri, 31 May 2019 09:51:23 GMT
Connection: keep-alive

] Body: [{
  "identifier": {
    "type": "dns",
    "value": "XXXXXXXX.YYY.netvolante.jp"
  },
  "status": "valid",
  "expires": "2019-06-24T11:01:35Z",
  "challenges": [
    {
      "type": "tls-alpn-01",
      "status": "pending",
      "uri": "https://acme-v01.api.letsencrypt.org/acme/challenge/PCjGD1iNViYKAHptF4sW4GC2n73bNQNLjeX8Zp7s4fY/16261719515",
      "token": "wWDW2qTAsRD7yqQGqG4xyvy4RdEE3tj0MJUo4SnJWW8"
    },
    {
      "type": "dns-01",
      "status": "pending",
      "uri": "https://acme-v01.api.letsencrypt.org/acme/challenge/PCjGD1iNViYKAHptF4sW4GC2n73bNQNLjeX8Zp7s4fY/16261719516",
      "token": "dYqN6Ks1X9f17esyRqw9MDb-oEY9DTO0A9zF0XpPC5o"
    },
    {
      "type": "http-01",
      "status": "valid",
      "uri": "https://acme-v01.api.letsencrypt.org/acme/challenge/PCjGD1iNViYKAHptF4sW4GC2n73bNQNLjeX8Zp7s4fY/16261719517",
      "token": "AlaIVSed-2BgUfxNdZqk3xHiTQXEryk1iRquDgz-iBc",
      "validationRecord": [
        {
          "url": "http://XXXXXXXX.YYY.netvolante.jp/.well-known/acme-challenge/AlaIVSed-2BgUfxNdZqk3xHiTQXEryk1iRquDgz-iBc",
          "hostname": "XXXXXXXX.YYY.netvolante.jp",
          "port": "80",
          "addressesResolved": [
            "220.109.14.ZZZ"
          ],
          "addressUsed": "220.109.14.ZZZ"
        },
        {
          "url": "https://XXXXXXXX.YYY.netvolante.jp/.well-known/acme-challenge/AlaIVSed-2BgUfxNdZqk3xHiTQXEryk1iRquDgz-iBc",
          "hostname": "XXXXXXXX.YYY.netvolante.jp",
          "port": "443",
          "addressesResolved": [
            "220.109.14.ZZZ"
          ],
          "addressUsed": "220.109.14.ZZZ"
        }
      ]
    }
  ],
  "combinations": [
    [
      0
    ],
    [
      1
    ],
    [
      2
    ]
  ]
}]
DEBUG: new authz: setup challenge env.
DEBUG: ==> finish new-authz
DEBUG: finish to do new-authz for XXXXXXXX.YYY.netvolante.jp
DEBUG: ==> start new-cert.
DEBUG: generate csr & private key
DEBUG: ======= Private Key ========
DEBUG: -----BEGIN RSA PRIVATE KEY-----
MII----t8Ag==
-----END RSA PRIVATE KEY-----

DEBUG: =========== CSR ============
DEBUG: -----BEGIN CERTIFICATE REQUEST-----
MII----oEd
-----END CERTIFICATE REQUEST-----

DEBUG: get new-cert
DEBUG: Post JWS Request: https://acme-v01.api.letsencrypt.org/acme/new-cert
DEBUG: Post JWS value: {
   "csr" : "MII----oEd",
   "resource" : "new-cert"
}

DEBUG: szUserAgent: [synology_armada38x_ds216j DSM6.2-24922 (DDNS)]
DEBUG: Post Request: https://acme-v01.api.letsencrypt.org/acme/new-cert
DEBUG: Post value: {
   "header" : {
      "alg" : "RS256",
      "jwk" : {
         "e" : "AQAB",
         "kty" : "RSA",
         "n" : "m8m----6Nw"
      }
   },
   "payload" : "eyJ----9Cg",
   "protected" : "eyJ----fQo",
   "signature" : "Myx----adw"
}

DEBUG: Curl Reply: [201] Header: [HTTP/1.1 100 Continue
Expires: Fri, 31 May 2019 09:51:29 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache

HTTP/1.1 201 Created
Server: nginx
Content-Type: application/pkix-cert
Content-Length: 1391
Boulder-Requester: 25089748
Link: ;rel="up"
Location: https://acme-v01.api.letsencrypt.org/acme/cert/0326c913416cf8b2b24471b835b71230fd27
Replay-Nonce: D2YrrsmTazwytMqMjoHjqlQ0Hd12w_qfshvV4nuI6ho
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
Expires: Fri, 31 May 2019 09:51:30 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache
Date: Fri, 31 May 2019 09:51:30 GMT
Connection: keep-alive

] Body: *?H???S?&?Al???Dq?5?0?'0
]
DEBUG: get issuer-cert
DEBUG: szUserAgent: [synology_armada38x_ds216j DSM6.2-24922 (DDNS)]
DEBUG: GET Request: https://acme-v01.api.letsencrypt.org/acme/issuer-cert
DEBUG: Curl Reply: [200] Header: [HTTP/1.1 200 OK
Server: nginx
Content-Type: application/pkix-cert
Content-Length: 1174
Replay-Nonce: s4nKwDEsz3MY7SX5koKgdl28aUYaQaNMqUl3X5YIYu0
X-Frame-Options: DENY
Strict-Transport-Security: max-age=604800
Expires: Fri, 31 May 2019 09:51:31 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache
Date: Fri, 31 May 2019 09:51:31 GMT
Connection: keep-alive

] Body: [0??0?z?
AB]
DEBUG: save to files
DEBUG: renew success. [/usr/syno/etc/certificate/_archive/aaaaaa].
**********************************

更新された証明書は、下記の通り
2019年5月31日 17:51:29 JST から
2019年8月29日 17:51:29 JST まで
タイムスタンプが1時間ズレているのは変わらず
----
sh-4.3# openssl x509 -text -noout -in /usr/syno/etc/certificate/_archive/aaaaaa/cert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            03:26:c9:13:41:6c:f8:b2:b2:44:71:b8:35:b7:12:30:fd:ff
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3
        Validity
            Not Before: May 31 08:51:29 2019 GMT
            Not After : Aug 29 08:51:29 2019 GMT
        Subject: CN=XXXXXXXX.YYY.netvolante.jp
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    **:**:........
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                30:D6:80:50:09:DA:AA:15:A8:9B:96:E8:BA:A5:6E:4C:8E:90:33:C4
            X509v3 Authority Key Identifier: 
                keyid:A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1

            Authority Information Access: 
                OCSP - URI:http://ocsp.int-x3.letsencrypt.org
                CA Issuers - URI:http://cert.int-x3.letsencrypt.org/

            X509v3 Subject Alternative Name: 
                DNS:XXXXXXXX.YYY.netvolante.jp
            X509v3 Certificate Policies: 
                Policy: 2.23.140.1.2.1
                Policy: 1.3.6.1.4.1.44947.1.1.1
                  CPS: http://cps.letsencrypt.org

            CT Precertificate SCTs: 
                Signed Certificate Timestamp:
                    Version   : v1(0)
                    Log ID    : **:**:........
                    Timestamp : May 31 09:51:30.147 2019 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                **:**:........
                Signed Certificate Timestamp:
                    Version   : v1(0)
                    Log ID    : **:**:........
                    Timestamp : May 31 09:51:30.178 2019 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                **:**:........
    Signature Algorithm: sha256WithRSAEncryption
         **:**:........
----

次回の更新は、「2019年7月30日(火) 17:51:29 JST」以降なので、忘れなければ、デバッグ実行して証明書と「new-authz」の有効期限を確認することにする。
コメント (3)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする