-
Notifications
You must be signed in to change notification settings - Fork 4
/
80.txt
389 lines (287 loc) · 21 KB
/
80.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
[6] [DFN[[[[CODE[.pem]]]]]] は、[[証明書]]や[[秘密鍵]]などの[[暗号化]]に関わる[[ファイル]]の交換・保存用のデータ形式です。
* 仕様書
[REFS[
- [42] [CITE@en-US[NSS Certificate Download Specification - Mozilla | MDN]] ([TIME[2014-05-07 16:41:21 +09:00]] 版) <https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Certificate_Download_Specification>
- [59] [CITE@en[RFC 7468 - Textual Encodings of PKIX, PKCS, and CMS Structures]] ([TIME[2015-04-20 12:22:43 +09:00]] 版) <https://tools.ietf.org/html/rfc7468>
]REFS]
[43] [[証明書ダウンロード]]仕様書 [SRC[>>42]] は[[証明書]]や[[証明書]]鎖に関する
[CODE[[[.pem]]]] ファイル形式を定義しています。
[7] それ以外の [CODE[[[.pem]]]] ファイル形式一般を規定した[[仕様書]]は長年存在していませんでしたが、
2015年に [DFN[[[RFC 7468]]]] として [[IETF]] で標準化されました。
;; [44] 歴史の項も参照。
* 構文
[11] [CODE[[[.pem]]]] 形式のファイルは、 [[ASCII]] 文字列で構成される[[テキストファイル]]です。
;; [12] [[非ASCII文字]]が含まれる場合にどう解釈されるかは定かではありません。
;; [74] [CODE[[[report-uri]]]] で指定された [[URL]] に送信される [[JSON]]
では、 [CODE[[[.pem]]]] 形式の[[文字列]]が使われます。
[13] [CODE[[[.pem]]]] 形式のファイルは、1つ以上の[[メッセージ]]で構成されます [SRC[>>59]]。
[FIG(railroad)[
= +
== ?
=== 前書き
== [[メッセージ]]
]FIG]
;; [14] 多くの場合は[[メッセージ]]は1つだけですが、 [[certification path]]
を表す一連の[[証明書]]を表す場合や[[ルート証明書]]として使われる[[証明書]]群を表す場合、
[[秘密鍵]]と[[証明書]]を含めた場合など、複数の[[メッセージ]]が含まれることがあります。
複数含まれる場合、用途により、順序が指定されることがあります。例えば[[中間証明書]]は[[ルート証明書]]や[[末端実体証明書]]に近い順序に並べる必要があるかもしれません。
[62] [[メッセージ]]の前に他のデータがあっても構わず、構文解析器は無視しなければ[['''なりません''']] [SRC[>>59]]。
[15] [[メッセージ]]は、 [[pre-EB]]、データ、 [[post-EB]] で構成されます。
[FIG(railroad)[
= [[pre-EB]]
= データ
= [[post-EB]]
]FIG]
;; [31] [[OpenSSL]] は [[EB]] を header line、footer line とそれぞれ呼んでいるようです。
;; [51] [[pre-EB]] の前や [[post-EB]] の後に何らかのデータがあっても、無視します [SRC[>>42]]。
[16] [[pre-EB]] は [CODE[-----BEGIN ]] の後にメッセージ種別が入り、
[CODE[-----]] が続きます [SRC[>>59]]。最後に[[改行]]が入ります。
[FIG(railroad)[
= [CODE[[[-----BEGIN ]]]]
= メッセージ種別
= [CODE[[[-----]]
= [[改行]]
]FIG]
[17] [[post-EB]] は [CODE[-----END ]] の後にメッセージ種別が入り、
[CODE[-----]] が続きます [SRC[>>59]]。最後に[[改行]]が入ります。
[FIG(railroad)[
= [CODE[[[-----END ]]]]
= メッセージ種別
= [CODE[[[-----]]
= [[改行]]
]FIG]
;; [27] [CODE[BEGIN]] と [CODE[END]] の後には [CODE(char)[[[U+0020]]]] が入ります。
[64] [[pre-EB]] と [[post-EB]] の[[メッセージ種別]]は同じでなければ[['''なりません''']]
[SRC[>>59]]。実装は違っていてもエラーとせず無視して構いません [SRC[>>59]]。
;; [65] 異なっていても扱える実装と、扱えない実装があります [SRC[>>59]]。
;; [18] 最後の[[メッセージ]]の後には[[改行]]がある[['''べき''']]です [SRC[>>59]]。
[20] データは、[[オクテット列]]を [[Base64]] で[[符号化]]したものです。
[[PEM]] 版 [[Base64]] [SRC[>>21]] は1行を丁度64文字とすることを求めています。
[[RFC 7468]] も64文字丁度の [[RFC 4648]] [[Base64]] としなければ[MUST[ならない]]と規定しています [SRC[>>59]]。
構文解析器は他の文字数でも扱えて構いません [SRC[>>59]]。
;; [19] 最後の行は、64文字以下で構いません [SRC[>>59]]。
;; [23] すべての [CODE[[[.pem]]]] ファイルがこれに従っているかは定かではありません。
;; [28] 元々の [[PEM]] の暗号化メールでは、データの部分は [[RFC 822]] 風の[[ヘッダー]]、
[[空行]]、[[本体]]で構成される[[メッセージ]]で、 [[Base64]] はそのうちの[[本体]]の部分だけでした。
[78] [[RFC 7468]] の [[ABNF]] 構文は[[詰め]]の省略を認めていますが、
その意味と処理方法は説明されていません。 [[RFC 7468]] の参照する [[RFC 4648]]
によると原則として[[詰め]]の省略は禁止されており、矛盾しています。
;; [[Base64]] も参照。
[63] 構文解析器は、[[空白]]その他 [[Base64]] 以外の[[文字]]を無視する[['''べきです''']]。
行末の空白は、無視する実装が多いようです。 [[Base64]] の行頭や行内の空白は、
扱えない実装が多いようです。余分な空白を生成しては[['''なりません''']]。 [SRC[>>59]]
[24] [[改行]]は、 [[CR]]、[[LF]]、[[CRLF]] のいずれかによって表されます [SRC[>>59]]。
;; [25] すべての実装がこれらの[[改行]] (やその混在) を扱えるのかは不明です。
[FIG(railroad)[
= |
== [CODE(charname)@en[[[CR]]]]
== [CODE(charname)@en[[[LF]]]]
== [CODE(charname)@en[[[CRLF]]]]
]FIG]
;; [32] 構文的に正しくないファイルを与えられた時どう解釈するのかは定かではありません。
* メッセージ種別
[26] [[メッセージ種別]] ([[RFC 7468]] のいう[DFN[[RUBYB[ラベル]@en[label]]]]) には、次のものがあります。
[FIG(list)[
- [CODE[[[CERTIFICATE]]]] - [[証明書]] ([[DER]]) [SRC[>>42, >>59]]
- [CODE[[[CERTIFICATE]]]] - [[PKCS #7証明書鎖]] [SRC[>>42, >>29]]
- [CODE[[[CERTIFICATE]]]] - [[Netscape Certificate Sequence]] [SRC[>>42]]
- [CODE[[[X509 CERTIFICATE]]]] - [[証明書]] [SRC[>>59]]
- [CODE[[[X.509 CERTIFICATE]]]] - [[証明書]] [SRC[>>59]]
- [CODE[[[TRUSTED CERTIFICATE]]]]
- [CODE[[[PKCS7]]]] - [[PKCS #7]] [SRC[>>29, >>59]]
- [CODE[[[CERTIFICATE CHAIN]]]] - [[PKCS #7証明書鎖]] [SRC[>>59]]
- [CODE[PKCS7 CERTIFICATE CHAIN]] - [[PKCS #7証明書鎖]] [SRC[>>79]]
- [CODE[[[CMS]]]] - [[CMS]] [SRC[>>59]]
- [CODE[[[RSA PRIVATE KEY]]]] - [[RSA]] [[秘密鍵]] ([[PKCS #1]]) [SRC[>>30]]
- [CODE[[[RSA PUBLIC KEY]]]] - [[RSA]] [[公開鍵]] ([[PKCS #1]]) [SRC[>>30]]
- [CODE[[[DSA PRIVATE KEY]]]] - [[DSA]] [[秘密鍵]] [SRC[>>35]]
- [CODE[[[PRIVATE KEY]]]] - [[秘密鍵]] ([[PKCS #8]]) [SRC[>>4, >>59]]
- [CODE[[[PUBLIC KEY]]]] - [[公開鍵]] [SRC[>>30, >>59]]
- [CODE[[[ENCRYPTED PRIVATE KEY]]]] - [[暗号化]]された[[秘密鍵]] ([[PKCS #8]]) [SRC[>>4, >>59]]
- [CODE[[[CERTIFICATE REQUEST]]]] - [[CSR]] ([[PKCS #10]]) [SRC[>>59]]
- [CODE[[[NEW CERTIFICATE REQUEST]]]] - [[CSR]] ([[PKCS #10]]) [SRC[>>59]]
- [CODE[NETSCAPE CERTIFICATE SEQUENCE]] - [[Netscape Certificate Sequence]] [SRC[>>79]]
- [CODE[[[X509 CRL]]]] - [[CRL]] [SRC[>>59]]
- [CODE[[[CRL]]]] - [[CRL]] [SRC[>>59]]
- [CODE[[[ATTRIBUTE CERTIFICATE]]]] - [[属性証明書]] [SRC[>>59]]
- [CODE[[[EC PARAMETERS]]]] - [[楕円曲線]]の[[引数]] [SRC[>>75]]
- [CODE[[[DH PARAMETERS]]]] - [[DH]]の[[引数]] [SRC[>>76]]
]FIG]
[39] 類似ファイル形式 (元の [[PEM]], >>37, >>38, >>40) で使われるメッセージ種別相当の文字列には次のものがあります。
[FIG(list)[
- [CODE[[[PRIVACY-ENHANCED MESSAGE]]]] - [[PEM]] [[暗号化]]メールの「内側」
- [CODE[[[PGP MESSAGE]]]] - [[OpenPGP]]
- [CODE[[[PGP PUBLIC KEY BLOCK]]]] - [[OpenPGP]]
- [CODE[[[PGP PRIVATE KEY BLOCK]]]] - [[OpenPGP]]
- [CODE[[[PGP MESSAGE, PART [VAR[X]]/[VAR[Y]]]]]] - [[OpenPGP]]
- [CODE[[[PGP MESSAGE, PART [VAR[X]]]]]] - [[OpenPGP]]
- [CODE[[[PGP SIGNATURE]]]] - [[OpenPGP]]
- [CODE[[[SSH2 PUBLIC KEY]]]] - [[SSH]]
- [CODE[[[DSA PRIVATE KEY]]]] - [[SSH]]
- [CODE[[[SSH2 ENCRYPTED PRIVATE KEY]]]] - [[SSH]]
]FIG]
* 処理
[52] [CODE[[[.pem]]]] ファイルとして構文解析して [[Base64]] [[符号化]]されたバイナリーデータを取り出した後の処理方法は、
利用する場面によって異なります。
[54] [CODE[[[.pem]]]] ファイルの内容が意図したものと異なる場合もあります。
[[EB]] の記述が想定と異なる場合もありますし、 [[EB]] の記述と実際の内容が異なる場合もあります。
[CODE[[[.pem]]]] ファイルを送信したプロトコルにおける [[MIME型]]と内容が異なる場合もあります。
[66] [[EB]] の記述と実際の内容が異なる場合でも、構文解析器は[RUBYB[華麗]@en[gracefully]]に処理できなければ[['''なりません''']]。実際の内容に従い処理しても構いませんが、
セキュリティー上問題ないか注意する必要があります。既存の実装がどう処理するかは、
それぞれです。 [SRC[>>59]]
[53] [[Webブラウザー]]で[[ダウンロード]]した場合の処理は、[[証明書ダウンロード]]を参照。
* MIME 型
[41] [[MIME型]]としては [CODE(MIME)@en[[[application/x-pem-file]]]] が使われます。
[55] 内容により異なる [[MIME型]]が使われることもあります。
;; [56] [[証明書ダウンロード]]も参照。
* 拡張子
[33] 一般には[[拡張子]] [CODE[[[.pem]]]] が使われます。
[34] 内容により [CODE[[[.cer]]]]、[CODE[[[.csr]]]]、[CODE[[[.key]]]]
などが用いられることもあります。
これらは [CODE[[[.pem]]]] 形式でない元のバイナリーファイルでも使われることがあり、
[[拡張子]]だけではファイル形式を判定できません。
* メッセージ種別 [CODE[CERTIFICATE]]
[67] ラベル [DFN[[CODE[[[CERTIFICATE]]]]]] は、[[公開鍵]][[証明書]]に用いられます
[SRC[>>59]]。
[68] データは、 [[ASN.1]] [CODE[[[Certificate]]]] です。
[[BER]] でなければ[['''なりません''']]。 [[DER]]
が[RUBYB[非常に好ましい]@en[strongly preferred]]です。 [SRC[>>59]]
[69] 実際には [[X.509]] [[証明書]]の他に、
[[PKCS #7証明書鎖]] [SRC[>>42, >>29]] や
[[Netscape Certificate Sequence]] [SRC[>>42]]
にもラベル [CODE[[[CERTIFICATE]]]] が使われることがあります。
[70] また [[X.509]] [[証明書]]を表すためにラベルとして [DFN[[CODE[[[X509 CERTIFICATE]]]]]]
や [DFN[[CODE[[[X.509 CERTIFICATE]]]]]] が使われることがあります [SRC[>>59]]。
これらを生成しては[['''なりません''']]が、構文解析器は等価として扱う[['''べきです''']]
[SRC[>>59]]。
[71] メッセージの前後に説明文が記述されることがあります。
その場合は[[証明書]]を説明するものである[['''べき''']]です。 [SRC[>>59]]
[EG[
[72] [SRC[>>59]]
[PRE(code)[
Subject: CN=Atlantis
Issuer: CN=Atlantis
Validity: from 7/9/2012 3:10:38 AM UTC to 7/9/2013 3:10:37 AM UTC
-----BEGIN CERTIFICATE-----
...
]PRE]
]EG]
[73] [[拡張子]]として [CODE[[[.cer]]]] を使うこともありますが、 [[DER]]
形式と区別するため [CODE[[[.crt]]]] を使う[['''べき''']]です [SRC[>>59]]。
実際には [CODE[[[.pem]]]] が使われることもよくあります。
* 歴史
[8] 本ファイル形式名の [[PEM]] は[[電子メール]]における[[暗号化]]の仕様を指すとされていますが、
[[PEM]] に (少なくても [[RFC]] として出版されたものには)
本ファイル形式の規定はなく、なぜ [CODE[[[.pem]]]] ファイルと呼ばれているかは定かではありません。
本ファイル形式は [[PEM]] の影響を受けているようですが、 [[PEM]]
で規定されるメッセージ形式とは明らかに違いがあります。
[9] [[PEM]] の実装が使っていたファイル形式なのかもしれません。あるいは [[PEM]]
の記憶が濃い時代に [[PEM]] 風のファイル形式として名付けられたのかもしれません。
(現在でいう) [[Base64]] のことを [[PEM]] と呼んでいたのかもしれません。
;; [10] [[MIME]] の一機能に過ぎない [[Base64]] のことを「[[MIME]]」と呼ぶ風習がかつて一部にありました。
[[MIME]] より前の時代に [[Base64]] のことを「[[PEM]]」と呼んでいても不思議ではありません。
[50] 本ファイル形式を明確に規定する仕様書として現時点で唯一発見できているのが、
[[証明書ダウンロード]]です。
[46] [[証明書ダウンロード]]仕様書 [SRC[>>42]] の最も初期と思われる1996年版 [SRC[>>45]]
の定義は、 [[PEM]] という語は登場しませんが、当時の [[PEM]] の [[RFC]] である
[[RFC 1113]] の [[Base64]] [SRC[>>47]] を参照しています。
;; [48] ちなみに [[Base64]] という名称も [[PEM]] の [[RFC]] には登場していません。
[[RFC]] としての初出は [[MIME]] ですが、それ以前から [[Base64]] という呼称があったのかは不明です。
いずれにしても1996年には既に [[MIME]] と [[Base64]] は有名になっていました。
[[Base64]] と呼びつつも [[PEM]] の [[RFC]] を参照しているのは興味深いところです。
;; [49] [[証明書ダウンロード]]仕様書が最初の定義で [[Netscape]] 社が本形式を考案したのか、
より以前からあった形式を [[Netscape]] が実装したのかは不明です。
[22] [[PEM]] 版 [[Base64]] は、 [[RFC 1421]] [SRC[>>21]] が最新の定義です。
(ただしこの [[RFC]] は既に [[HISTORIC]] となっています。)
[61] 2015年に [[RFC 7468]] が [[IETF]] [[提案標準]] [[RFC]]
として発行され [SRC[>>60]]、 [CODE[[[.pem]]]] ファイル一般の構文が初めて明文化されました。
[REFS[
- [45] [CITE[Netscape Certificate Download Specification]] ([TIME[2015-04-12 12:43:10 +09:00]] 版) <http://web.archive.org/web/19970709163955/http://home.netscape.com/eng/security/downloadcert.html>
- [47] [CITE@en[RFC 1113 - Privacy enhancement for Internet electronic mail: Part I - message encipherment and authentication procedures]] ([TIME[2015-03-22 21:14:51 +09:00]] 版) <http://tools.ietf.org/html/rfc1113#section-4.3>
- [21] [CITE@en[RFC 1421 - Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures]] ([TIME[2015-02-22 14:28:36 +09:00]] 版) <https://tools.ietf.org/html/rfc1421#section-4.3.2.4>
- [60] [CITE@en[RFC 7468 - Textual Encodings of PKIX, PKCS, and CMS Structures]] ([TIME[2015-04-20 12:22:43 +09:00]] 版) <https://tools.ietf.org/html/rfc7468>
]REFS]
* 関連
[37] [[RFC 4716]] のファイル形式と似ていますが、微妙に違います。
[REFS[
- [36] [CITE@en[RFC 4716 - The Secure Shell (SSH) Public Key File Format]] ([TIME[2015-02-08 18:20:33 +09:00]] 版) <https://tools.ietf.org/html/rfc4716>
]REFS]
[38] [[OpenPGP]] の [[ASCII Armor]] とも似ていますが、そちらは元の [[PEM]]
の形式により似ています (微妙に違います)。
[40] [[SSH]] クライアントはこれらのいずれとも微妙に違った、本項の [[PEM]]
形式に [[RFC 822]] 風ヘッダーを足した[[秘密鍵]]ファイル [SRC[>>58]] を使うことがあります。
(本項の形式を使うこともあります。)
[[RFC 4716]] は [[SSH]] 用として更に微妙に異なる構文を規定しています。
[77] これらのファイル形式は、おそらくは大元は共通なのでしょうが、
他のファイル形式を参考に自身の用途に移植して実装した時に、
それぞれの思惑で少しずつ違いが生じたのでしょう。
* メモ
[FIG(amazon)[
[[暗号化]]
]FIG]
[1] [CITE[証明書のファイル形式について]]
([TIME[2009-05-14 20:39:44 +09:00]])
<http://moca.wide.ad.jp/moca_guide/about_fileformat.html>
[2] [CITE@ja[.PEM SSL サーバ証明書とは。]]
([TIME[2014-10-24 16:51:29 +09:00]] 版)
<http://www.digicert.ne.jp/howto/basis/pem-ssl-creation.html>
[3] [CITE@ja[SSL/TLS/PKI メモ]]
([[Masatoshi Sato]] 著, [TIME[2011-07-08 01:12:34 +09:00]] 版)
<http://siisise.net/linux/ssl.html>
[FIG(quote)[
[FIGCAPTION[
[4] [CITE@en[RFC 5958 - Asymmetric Key Packages]]
([TIME[2015-04-05 22:36:35 +09:00]] 版)
<https://tools.ietf.org/html/rfc5958#section-5>
]FIGCAPTION]
> .p8 files are sometimes PEM-encoded. When .p8 files are PEM encoded
> they use the .pem file extension. PEM encoding is either the Base64
> encoding, from Section 4 of '''['''RFC4648''']''', of the DER-encoded
> EncryptedPrivateKeyInfo sandwiched between:
> -----BEGIN ENCRYPTED PRIVATE KEY-----
> -----END ENCRYPTED PRIVATE KEY-----
> or the Base64 encoding, see Section 4 of '''['''RFC4648''']''', of the DER-
> encoded PrivateKeyInfo sandwiched between:
> -----BEGIN PRIVATE KEY-----
> -----END PRIVATE KEY-----
>
]FIG]
[5] [CITE[java - what is the differences between "BEGIN RSA PRIVATE KEY" and "BEGIN PRIVATE KEY" - Stack Overflow]]
([TIME[2015-04-08 01:00:10 +09:00]] 版)
<http://stackoverflow.com/questions/20065304/what-is-the-differences-between-begin-rsa-private-key-and-begin-private-key>
[30] [CITE[rsa - RSA key processing tool]] ([TIME[2015-04-11 00:09:25 +09:00]] 版) <https://www.openssl.org/docs/apps/rsa.html>
[35] [CITE[dsa - DSA key processing]] ([TIME[2015-04-11 00:20:50 +09:00]] 版) <https://www.openssl.org/docs/apps/dsa.html>
[29] [CITE[pkcs7 - PKCS#7 utility]] ([TIME[2015-04-11 00:07:16 +09:00]] 版) <https://www.openssl.org/docs/apps/pkcs7.html>
[FIG(quote)[
[FIGCAPTION[
[57] [CITE[SSL_CTX_load_verify_locations - set default locations for trusted CA certificates]]
([TIME[2015-04-18 21:29:53 +09:00]] 版)
<https://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html>
]FIGCAPTION]
> Before, between, and after the certificates text is allowed which can be used e.g. for descriptions of the certificates.
]FIG]
[58] [CITE[PEM, PEM_read_bio_PrivateKey, PEM_read_PrivateKey, PEM_write_bio_PrivateKey, PEM_write_PrivateKey, PEM_write_bio_PKCS8PrivateKey, PEM_write_PKCS8PrivateKey, PEM_write_bio_PKCS8PrivateKey_nid, PEM_write_PKCS8PrivateKey_nid, PEM_read_bio_PUBKEY, PEM_read_PUBKEY, PEM_write_bio_PUBKEY, PEM_write_PUBKEY, PEM_read_bio_RSAPrivateKey, PEM_read_RSAPrivateKey, PEM_write_bio_RSAPrivateKey, PEM_write_RSAPrivateKey, PEM_read_bio_RSAPublicKey, PEM_read_RSAPublicKey, PEM_write_bio_RSAPublicKey, PEM_write_RSAPublicKey, PEM_read_bio_RSA_PUBKEY, PEM_read_RSA_PUBKEY, PEM_write_bio_RSA_PUBKEY, PEM_write_RSA_PUBKEY, PEM_read_bio_DSAPrivateKey, PEM_read_DSAPrivateKey, PEM_write_bio_DSAPrivateKey, PEM_write_DSAPrivateKey, PEM_read_bio_DSA_PUBKEY, PEM_read_DSA_PUBKEY, PEM_write_bio_DSA_PUBKEY, PEM_write_DSA_PUBKEY, PEM_read_bio_DSAparams, PEM_read_DSAparams, PEM_write_bio_DSAparams, PEM_write_DSAparams, PEM_read_bio_DHparams, PEM_read_DHparams, PEM_write_bio_DHparams, PEM_write_DHparams, PEM_read_bio_X509, PEM_read_X509, PEM_write_bio_X509, PEM_write_X509, PEM_read_bio_X509_AUX, PEM_read_X509_AUX, PEM_write_bio_X509_AUX, PEM_write_X509_AUX, PEM_read_bio_X509_REQ, PEM_read_X509_REQ, PEM_write_bio_X509_REQ, PEM_write_X509_REQ, PEM_write_bio_X509_REQ_NEW, PEM_write_X509_REQ_NEW, PEM_read_bio_X509_CRL, PEM_read_X509_CRL, PEM_write_bio_X509_CRL, PEM_write_X509_CRL, PEM_read_bio_PKCS7, PEM_read_PKCS7, PEM_write_bio_PKCS7, PEM_write_PKCS7, PEM_read_bio_NETSCAPE_CERT_SEQUENCE, PEM_read_NETSCAPE_CERT_SEQUENCE, PEM_write_bio_NETSCAPE_CERT_SEQUENCE, PEM_write_NETSCAPE_CERT_SEQUENCE - PEM routines]]
([TIME[2015-04-18 21:50:36 +09:00]] 版)
<https://www.openssl.org/docs/crypto/pem.html>
[75] [CITE@en[OpenSSL]]
([[OpenSSL Foundation, Inc.]] 著, [TIME[2015-09-27 01:47:48 +09:00]] 版)
<https://www.openssl.org/docs/manmaster/apps/ecparam.html>
[76] [CITE@en[OpenSSL]] ([[OpenSSL Foundation, Inc.]] 著, [TIME[2015-09-27 11:37:26 +09:00]] 版) <https://www.openssl.org/docs/manmaster/apps/dhparam.html>
[79] [CITE[X.509 Style Guide]]
([TIME[2004-09-21 00:09:43 +09:00]])
<https://www.cs.auckland.ac.nz/~pgut001/pubs/x509guide.txt>
[80] [CITE@en[/docs/manmaster/man3/SSL_CTX_load_verify_locations.html]]
([[OpenSSL Foundation, Inc.]]著, [TIME[2018-09-23 23:43:52 +09:00]])
<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html>
[FIG(quote)[
[FIGCAPTION[
[81] [CITE@en[/docs/manmaster/man3/SSL_CTX_load_verify_locations.html]]
([[OpenSSL Foundation, Inc.]]著, [TIME[2018-09-23 23:44:22 +09:00]])
<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html>
]FIGCAPTION]
> The file can contain several CA certificates identified by
> -----BEGIN CERTIFICATE-----
> ... (CA certificate in base64 encoding) ...
> -----END CERTIFICATE-----
> sequences. Before, between, and after the certificates text is allowed which can be used e.g. for descriptions of the certificates.
]FIG]