Python3でpyopensslを使ってRSA秘密鍵ファイルを生成する
インストール
まず、下記コマンドでpyOpenSSLパッケージをインストールします。 cryptographyパッケージも同時にインストールされます。
$ pip install pyopenssl
環境によってはpipではなくpip3を使ってインストールを行います。
コード
鍵長4096bitのRSA暗号の秘密鍵を生成し、PKCS#8形式のPEMエンコーディングのファイルとして保存します。
import OpenSSL.crypto import cryptography.hazmat.primitives.serialization # RSA-4096の秘密鍵を生成 bits = 4096 key_type = OpenSSL.crypto.TYPE_RSA pk = OpenSSL.crypto.PKey() pk.generate_key(key_type, bits) key = pk.to_cryptography_key() # 秘密鍵をPEMエンコーディングで出力 encoding = cryptography.hazmat.primitives.serialization.Encoding.PEM # PEMエンコーディング format = cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8 # PKCS #8 形式 encryption_algorithm = cryptography.hazmat.primitives.serialization.NoEncryption() pem = key.private_bytes(encoding, format, encryption_algorithm) # ファイルに保存 with open("private.key", "wb") as file: file.write(pem)
実行結果
private.keyが生成されたので、openssl(pythonではない)を使って中身を見てみました。 下記の様にしっかり生成されています。
$ openssl rsa -text -noout -in private.key Private-Key: (4096 bit) modulus: 00:e5:72:53:0a:d1:05:45:32:a9:13:5b:14:f2:1a: 50:73:c8:ed:82:26:e5:a3:93:b9:58:ff:f8:5f:30: 84:27:81:6d:d7:37:f0:ce:a0:11:3b:f4:e2:e7:b9: 6e:25:7c:36:e5:d7:e6:4c:bd:46:06:e4:8a:7b:a9: 41:95:8a:ae:a1:ef:d9:61:f7:e6:72:df:2c:0a:cd: 86:25:81:6d:7d:e5:db:21:67:f9:5b:5f:d0:1a:11: af:d5:c9:66:d7:b2:b7:d1:35:60:32:ff:35:39:9b: e0:cb:b0:69:7d:ab:92:1c:9b:d1:69:bb:7c:05:74: 98:43:ea:39:13:15:8f:58:7f:c5:f5:fe:dd:6a:09: 43:f2:b7:25:18:97:74:f6:d8:f1:aa:62:f9:8f:89: 83:54:0a:a5:a1:e0:1d:be:55:9e:fe:f6:59:93:c4: 42:85:db:01:f4:07:91:bf:38:24:f6:10:cf:16:84: cd:9f:be:76:a7:15:03:57:c9:c9:94:dd:6a:81:1a: b3:bf:b9:4b:97:cb:3d:ce:ab:1f:46:92:ec:81:95: 2d:20:ea:39:48:26:e7:3c:68:a6:22:8e:03:94:f9: 15:da:c5:bc:9a:38:e7:ea:6e:96:c1:b5:55:95:e6: e5:02:1a:7d:14:cb:b3:7e:af:b0:fb:8b:e3:70:b0: 28:2d:47:e1:ec:87:0e:06:c8:0b:f5:61:e2:5b:16: 02:1c:f6:cb:36:ff:55:c3:21:62:1b:11:f5:c1:f1: 04:ae:69:96:d2:8b:ce:bb:0d:78:c5:89:dd:f6:d1: af:38:f2:a7:d7:b3:35:d8:dc:f9:00:79:a0:54:30: 1f:97:e4:30:95:5a:71:15:51:13:42:49:59:18:03: fa:a1:19:8a:8d:2f:20:56:e1:9e:9b:97:fe:81:33: b7:b3:2e:8c:49:a5:e1:ac:29:a2:4f:b1:01:62:87: a0:ac:6b:53:a6:14:08:9e:0a:90:9b:c5:7a:fc:dd: bb:b0:60:4c:9a:42:d4:e6:82:7a:da:1c:45:c6:2c: fb:d8:a2:79:45:6f:63:b6:9c:6f:f3:b0:a0:0b:56: 3d:f4:03:a2:07:ef:37:d2:53:31:be:44:6b:2b:fa: ab:79:83:06:18:1d:17:7f:fc:13:06:00:b5:1e:f5: 64:8c:e1:d2:81:73:26:b2:4a:6b:80:e5:a6:68:7c: 2a:bd:e1:31:d8:6b:f9:8d:05:5d:9a:1a:f0:bd:a8: e9:34:96:4f:2d:69:ae:a2:6d:80:19:c9:94:e1:1e: 63:6f:69:e2:a2:b7:4c:82:23:2b:3a:ae:ee:44:64: a2:01:f7:1a:5f:74:e7:dc:4a:50:78:23:de:c7:b6: f5:8a:bd publicExponent: 65537 (0x10001) privateExponent: 79:15:38:df:97:68:99:98:df:82:d8:69:18:4e:6c: b0:7d:93:61:40:d7:a4:d8:3b:52:cd:5a:2c:19:b5: 54:07:c8:88:6f:fc:03:7e:93:39:b9:c4:d8:96:91: 9a:f4:8f:20:02:2c:85:c8:c8:a0:b0:90:a8:2b:ac: f1:96:cb:0b:a8:40:66:a3:e5:18:2f:cf:d5:2f:9a: a0:46:4a:1a:cb:67:35:9c:e2:09:a7:69:71:a8:6d: cb:7b:4a:6b:7f:e3:e3:62:b0:8e:99:01:64:92:6f: 31:ee:b9:ec:d8:d2:f5:88:01:1e:34:13:81:e9:82: c5:2c:60:cc:42:6f:70:3b:95:a3:78:c9:2d:c1:0f: fb:91:4c:e1:4a:64:2e:34:54:6c:1f:69:25:a7:63: 07:c1:ca:a0:bf:5d:d2:e8:ea:4c:10:83:3b:28:b2: 16:63:7a:07:66:cb:32:47:15:b2:49:32:8f:e6:ab: 80:a6:89:85:28:e0:a7:be:54:43:dc:08:ed:72:c2: f2:e5:7d:0f:f0:f0:80:14:ec:1f:59:3f:b8:2e:9a: 2f:29:8b:eb:18:a4:a4:cb:71:09:01:3a:c0:ae:26: 2b:5a:78:6a:46:a7:94:9e:a1:ae:3d:dc:99:8b:cc: c4:ac:67:df:c6:93:c5:c2:3f:ba:af:9a:ea:07:fc: 5a:d1:2b:6e:3b:4d:0e:93:4e:90:0b:2f:b5:c3:55: 70:57:a9:01:80:df:22:36:6c:0e:eb:71:22:13:03: 8a:be:78:fc:f4:9c:f6:01:2f:5b:90:c0:62:a0:83: 8f:88:c5:87:37:d6:63:ba:3c:97:09:0d:d2:31:b4: 35:94:8f:20:81:1d:2f:14:c3:4d:04:67:7b:4e:a3: d5:04:93:31:c5:82:56:e6:ce:76:d8:61:f6:b3:33: 84:39:06:24:9a:fc:6d:a7:45:16:5b:3a:18:c0:c0: db:27:63:c3:13:77:cf:d2:54:c1:f8:f3:a5:7a:83: 93:78:03:9d:33:d6:36:2c:4f:36:77:4c:83:be:60: 85:25:57:a2:ce:66:30:09:4c:5f:54:e0:a7:07:a7: 3d:dd:7c:88:66:6b:b2:5f:fd:22:5c:1e:5a:64:24: 29:8b:2f:b1:02:38:b1:eb:f0:13:99:c3:14:59:1d: 99:ca:5f:a5:64:95:9f:3d:ab:5c:64:de:ae:8d:86: c0:24:eb:02:b4:0e:39:e0:4b:3d:85:d4:17:12:c7: d8:e2:ed:a9:77:a7:b8:24:55:b9:cb:a3:aa:62:95: 4d:e2:09:55:29:f3:75:53:48:26:88:20:e7:df:f8: df:4d:d3:b9:76:00:ea:3f:51:5f:b7:e1:a6:bd:26: 4a:21 prime1: 00:f3:f3:4f:3f:b8:82:54:92:b3:38:84:53:3d:b5: b0:f0:56:bb:4f:b5:23:b2:a7:d9:c1:42:8a:42:eb: 44:c7:50:59:f3:2b:70:de:cb:65:4f:4f:e6:0b:23: b7:d4:f3:d2:cb:e1:67:7a:34:f8:77:d1:34:7f:69: 2c:af:59:ec:fa:35:6c:61:69:56:97:be:83:38:84: b7:f9:5e:d6:fd:55:00:22:81:a8:31:ad:34:49:c7: 60:5e:5e:17:f5:71:ba:19:79:0b:76:86:2c:da:3c: 41:d2:a7:b5:5b:e3:85:e2:95:42:be:58:24:36:65: 80:cf:e7:0f:f4:dd:7f:0e:a1:3c:59:ac:5a:ed:b8: 3c:d5:8c:5b:29:10:5d:f4:08:27:93:2b:1b:d1:14: 28:50:6f:29:a7:69:31:a0:c4:c2:dd:f0:52:c4:b4: bc:25:b7:9d:91:f7:99:99:35:49:14:3a:e0:a4:5c: 6e:33:75:da:fa:c3:42:10:d9:03:8e:1d:33:9d:72: fc:af:32:96:48:81:5e:c3:d1:7d:f4:66:30:38:f6: b5:d2:57:a4:0d:f5:51:4b:17:78:fd:55:2b:fa:30: d8:07:c9:ea:a9:90:09:c3:04:a7:7c:11:e4:10:1d: dd:e9:73:d2:92:c3:1d:1c:0b:52:88:9e:e7:8f:ac: c9:b5 prime2: 00:f0:c7:9e:0c:ea:37:d8:33:24:c3:32:d7:0c:dd: cc:fa:00:8e:f2:74:b2:c8:e7:9e:aa:8d:9e:60:04: 91:fb:7c:9f:0f:6d:36:94:a3:49:eb:0a:de:65:df: 6b:cb:b0:20:31:3a:3a:62:48:42:71:06:a6:f3:96: 4e:7b:12:44:17:53:3b:e7:82:e2:45:ec:27:6b:cf: 6b:36:b7:40:ac:9f:85:e7:68:3b:73:d0:1c:9f:21: cb:b1:2f:72:a2:44:fe:7e:50:25:15:ef:1a:90:90: 6c:1a:c5:4f:a4:3b:f5:08:4a:12:e1:7a:2f:f5:ad: f9:69:e5:e0:1c:fb:e5:a7:57:e1:d3:5d:76:45:03: 77:47:9f:9d:49:23:6d:fa:c3:dc:01:63:68:83:09: 6f:ff:7b:37:7f:6e:cf:45:e4:9e:6b:d7:51:8c:ba: 02:18:ec:b5:ff:54:e5:c8:2d:96:5c:38:a5:47:13: 8a:ba:a3:81:23:d7:92:0a:ef:51:7b:aa:31:c0:8f: 40:c9:74:ee:7c:ca:61:88:9b:2c:ab:e2:79:8c:86: f4:05:e8:63:97:36:7a:d0:a1:bd:cb:e0:16:72:6a: db:b9:4c:6d:9f:b8:e8:64:8d:27:6e:1c:6d:1d:48: af:7c:ee:ce:99:ce:d2:68:d8:69:14:e8:2b:e6:6f: 41:e9 exponent1: 1a:0f:5e:e2:e6:b9:fd:80:e2:66:62:34:66:3e:37: 95:a5:1e:43:68:8d:54:b3:7b:9e:9a:96:1c:89:f7: 81:f7:42:74:a8:aa:59:12:8f:53:06:ad:03:79:a0: 54:be:6b:41:5e:65:e8:77:2a:27:da:90:6a:1f:f9: 27:0e:4b:33:7b:6b:85:88:74:38:a7:a0:6a:f4:3a: 97:08:1b:9d:5a:6c:36:43:75:8d:40:fc:79:f9:33: 81:41:39:fb:fd:57:2d:0b:72:3f:0a:1c:56:7f:e3: 64:36:88:38:35:b9:02:b8:81:35:c6:42:b0:10:ed: ce:c7:d7:3b:88:41:df:75:37:f6:38:64:4a:4a:c9: 2c:e2:de:86:27:7a:71:ec:41:16:06:9f:e5:18:eb: 29:94:86:75:9c:d6:31:5f:73:95:b3:eb:93:99:df: 13:84:66:ef:c5:ec:81:a2:60:99:29:a4:ff:c9:e3: f7:d9:5a:38:39:8d:a0:31:1e:a1:1a:db:7d:b1:5f: ee:f3:4f:7c:95:5d:63:3b:c8:e1:c7:dc:d4:e8:fe: 09:67:55:5e:2c:5b:af:d2:e5:18:e2:f5:5c:b7:c5: 0c:27:f4:ca:82:59:98:9c:b1:ab:9e:59:a7:a3:19: 26:ac:39:cd:75:cc:71:47:80:5c:99:e5:10:c3:1b: 95 exponent2: 67:fb:dd:6e:f8:6b:db:ab:e2:b1:86:30:47:77:36: 81:b5:62:06:a5:8d:5c:a4:62:ea:87:34:a1:84:f7: c2:a3:44:52:36:39:3f:21:f1:d7:57:1f:4a:e1:9d: 3d:1f:38:17:ea:6c:b2:6b:40:7e:6d:80:06:6c:a0: 42:18:56:5d:b8:6d:83:83:0b:d3:64:b4:75:a3:e3: 4a:83:03:a4:49:54:5b:e6:b0:de:48:3f:44:1e:25: 48:c5:13:fd:ae:4c:36:22:c8:91:5b:6c:9e:88:30: 97:b3:24:bc:e9:c3:dd:ab:97:d1:d6:a2:05:b8:f7: a0:db:4c:d9:57:94:0b:9c:31:83:c5:b6:41:01:c9: 2e:9e:69:1f:df:f4:2c:3b:0f:b5:6d:c8:01:e7:3e: 7e:18:29:94:98:37:5d:98:e9:2d:eb:94:65:71:23: 5c:be:45:af:1a:6c:0d:f2:5a:20:43:ba:65:22:b4: 63:fc:1e:d6:6a:cf:c0:77:30:3a:76:fa:fb:8d:22: 4e:9e:78:2c:5e:7e:96:af:65:30:6a:23:52:24:2a: 18:af:0e:eb:8b:f4:a8:4b:61:9b:3d:90:94:23:3f: f7:1b:61:b0:7b:fb:a9:09:28:c1:2d:f7:95:91:01: 70:b3:f5:77:89:51:67:44:26:c5:87:ab:05:de:80: 99 coefficient: 00:a0:7a:49:9e:fb:db:86:83:c0:3c:57:b2:d6:64: 23:7e:94:74:41:9a:9c:55:7e:a8:0c:1c:bd:03:97: 6b:19:f2:3b:ba:cd:17:06:17:40:4a:17:60:5f:ef: a0:cd:34:7d:29:e6:a6:39:56:2c:77:61:f2:b8:cf: 97:5e:5c:2c:a9:67:c5:90:a3:64:2f:5c:30:de:81: c1:77:db:09:28:c3:e1:87:c5:3c:9f:8f:b7:93:31: 08:42:c3:29:bc:4f:53:72:ec:0f:e9:b3:42:f0:00: 8d:4d:6b:c8:f8:82:ba:9a:07:93:9b:e9:27:6f:4e: a9:a9:df:f6:31:7d:e6:95:19:aa:15:5d:59:39:9a: dc:c3:4a:c0:10:70:bf:79:1e:de:c1:1d:1c:60:48: 5e:b1:5c:1e:53:8d:7f:69:8b:1b:cf:69:a8:c0:ae: c9:c0:aa:3c:03:30:22:c5:bc:78:34:11:ef:ce:c6: 66:03:15:02:20:a4:4e:d8:bc:0f:f9:43:ec:94:d5: 9d:04:81:2f:27:fc:7c:2c:f9:f3:ec:59:c5:59:6f: bf:0a:56:12:0e:13:5c:73:bb:43:d1:ff:0c:5e:b3: c2:9f:b1:c6:e1:d2:03:7c:5c:84:1d:5c:be:68:06: 50:d7:23:64:f6:b3:5d:1b:9e:6b:a5:27:5f:ad:9e: b6:45
注意
一度でもネット上に公開してしまった秘密鍵は破棄してください。