[6] [DFN[[CODE[GeneralizedTime]]]] は、 [[ASN.1]] で[[日時]]を表す構文の1つです。

[9] [[ASN.1]] で定義されている他に、 [[LDAP]] や [[PKIX]]
で[[プロファイル]]が定められています。

* 仕様書

[REFS[
- [1] [CITE@en[RFC 5280 - Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile]]
([TIME[2015-02-22 15:44:10 +09:00]] 版)
<http://tools.ietf.org/html/rfc5280#section-4.1.2.5.2>
- [2] [CITE@en[RFC 4517 - Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules]]
([TIME[2015-03-08 19:15:43 +09:00]] 版)
<http://tools.ietf.org/html/rfc4517#section-3.3.13>
]REFS]

* 構文

[7] [[年]]、[[月]]、[[日]]、[[時]]、[[分]]、[[秒]]、[[時間帯]]で構成される[[文字列]]です
[SRC[>>2]]。

[11] [[年]]は、4桁の[[ASCII数字]]列です [SRC[>>2]]。

[12] [[月]]は、 [N[1]] から [N[12]] の範囲の2桁の[[ASCII数字]]列です [SRC[>>2]]。

[13] [[日]]は、 [N[1]] から [N[31]] の範囲の2桁の[[ASCII数字]]列です [SRC[>>2]]。

[14] [[時]]は、 [N[0]] から [N[23]] の範囲の2桁の[[ASCII数字]]列です [SRC[>>2]]。

[15] [[分]]は、 [N[0]] から [N[59]] の範囲の2桁の[[ASCII数字]]列です [SRC[>>2]]。

[16] [[秒]]部は、[N[0]] から [N[60]] の範囲の2桁の[[ASCII数字]]列です。
[N[60]] は、[[閏秒]]です。 [SRC[>>2]]

[8] [[LDAP]] では、[[分]]と[[秒]]または[[秒]]を省略できます [SRC[>>2]]。

[5] [[PKIX]] では、[[分]]と[[秒]]を含めなければ[MUST[なりません]] [SRC[>>1]]。

[17] [[小数部]]は、 [CODE[.]] または [CODE[,]] の後に、
1桁以上の [[ASCII数字]]列で表します [SRC[>>2]]。
[[小数部]]は、[[時]]、[[分]]、[[秒]]のうち省略されなかった最後のものの[[小数部]]を表します
[SRC[>>2]]。

[3] [[LDAP]] では、 [[小数部]]を省略できます [SRC[>>2]]。
[[PKIX]] では、[[小数部]]を含めては[MUST[なりません]] [SRC[>>1]]。

[18] [[時間帯]]は、[[UTC]] を表す [CODE[Z]] ([[大文字]]) か、
[[時差]]のいずれかです [SRC[>>2]]。
[[LDAP]] では、 [CODE[Z]] を使う[SHOULD[べきです]] [SRC[>>2]]。
[[PKIX]] では、 [CODE[Z]] を使わなければ[MUST[なりません]] [SRC[>>1]]。

;; [4] 必ずしも明確ではありませんが、 [[PKIX]] では [CODE[+0000]] は禁止されているようです。

[19] [[時差]]は、 [CODE[+]] または [CODE[-]] の後に、[[時]]と[[分]]を続けたものです。
[[分]]は、省略できます。 [SRC[>>2]]

[10] [[ASN.1]] では、[[時間帯]]は省略でき、[[地方時]]を表します。
[[LDAP]] [SRC[>>2]] と [[PKIX]] [SRC[>>1]] では、[[時間帯]]を省略しては[MUST[なりません]]。

[20] 適当な[[日]]や[[時]]を表さない組み合わせは、[[非妥当]]と考える[SHOULD[べきです]]
[SRC[>>2]]。

* 識別子

[21] [[オブジェクト識別子]] [CODE[1.3.6.1.4.1.1466.115.121.1.24]]
は、 [[LDAP]] 版 [[Generalized Time]] を表します [SRC[>>2]]。

* 文脈

- [28] [[TSP]]
--[29] [CITE@en[RFC 3161 - Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)]], [TIME[2021-04-18T15:14:09.000Z]], [TIME[2021-04-27T02:09:24.937Z]] <https://tools.ietf.org/html/rfc3161#page-9>

* 実装

[22] 
[[OpenSSL]] に[[秒の小数部]]を与えて[[証明書]]を作成すると、
[[秒の小数部]]のついた [CODE[GeneralizedTime]]
が生成されます。 [[ASN.1]] 的には間違っていませんが、
[[PKIX]] 的には不適切であり、実装によってはそのような[[証明書]]を受け入れません。


[24] [CITE@en[OpenSSL accepts a certificate which has a fractional validity · Issue #2620 · openssl/openssl]]
([TIME[2018-11-03 16:07:50 +09:00]])
<https://github.com/openssl/openssl/issues/2620>

[25] [CITE@en[openssl year 2050 problem - verify does not work starting in 2050. · Issue #4915 · openssl/openssl]]
([TIME[2018-11-03 21:11:51 +09:00]])
<https://github.com/openssl/openssl/issues/4915>

[26] [CITE@en[143334 - Support GeneralizedTime option in certificate validity field]]
([TIME[2018-11-03 21:14:58 +09:00]])
<https://bugzilla.mozilla.org/show_bug.cgi?id=143334>

[27] [CITE@en[gnutls fails to reject certificates with Generalized time prior to 2049 (#135) · Issues · gnutls / GnuTLS · GitLab]]
([TIME[2018-11-03 22:15:42 +09:00]])
<https://gitlab.com/gnutls/gnutls/issues/135>