alice $ openssl genrsa -aes128-out alice_private.pem 1024 Generating RSA private key, 1024 bit long modulus (2 primes) ..........+++++ ..................................+++++ e is 65537 (0x010001) Enter pass phrase for alice_private.pem: Verifying - Enter pass phrase for alice_private.pem: alice $ alice $ alice $ ls -l alice_private.pem -rw-------. 1 alice alice 966 Mar 2217:44 alice_private.pem alice $ alice $ file alice_private.pem alice_private.pem: PEM RSA private key alice $
Bob 使用相同的步骤来创建他的密钥对:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
bob $ openssl genrsa -aes128-out bob_private.pem 1024 Generating RSA private key, 1024 bit long modulus (2 primes) ..................+++++ ............................+++++ e is 65537 (0x010001) Enter pass phrase for bob_private.pem: Verifying - Enter pass phrase for bob_private.pem: bob $ bob $ ls -l bob_private.pem -rw-------. 1 bob bob 986 Mar 2213:48 bob_private.pem bob $ bob $ file bob_private.pem bob_private.pem: PEM RSA private key bob $
如果你对密钥文件感到好奇,可以打开命令生成的 .pem 文件,但是你会看到屏幕上的一堆文本:
1 2 3 4 5 6 7 8 9 10 11 12 13
alice $ head alice_private.pem -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,E26FAC1F143A30632203F09C259200B9
pdKj8Gm5eeAOF0RHzBx8l1tjmA1HSSvy0RF42bOeb7sEVZtJ6pMnrJ26ouwTQnkL JJjUVPPHoKZ7j4QpwzbPGrz/hVeMXVT/y33ZEEA+3nrobwisLKz+Q+C9TVJU3m7M /veiBO9xHMGV01YBNeic7MqXBkhIrNZW6pPRfrbjsBMBGSsL8nwJbb3wvHhzPkeM e+wtt9S5PWhcnGMj3T+2mtFfW6HWpd8Kdp60z7Nh5mhA9+5aDWREfJhJYzl1zfcv Bmxjf2wZ3sFJNty+sQVajYfk6UXMyJIuWgAjnqjw6c3vxQi0KE3NUNZYO93GQgEF pyAnN9uGUTBCDYeTwdw8TEzkyaL08FkzLfFbS2N9BDksA3rpI1cxpxRVFr9+jDBz alice $
alice $ openssl rsa -in alice_private.pem -pubout > alice_public.pem Enter pass phrase for alice_private.pem: writing RSA key alice $ alice $ls-l *.pem -rw-------. 1 alice alice 966 Mar 2217:44 alice_private.pem -rw-rw-r--. 1 alice alice 272 Mar 2217:47 alice_public.pem alice $
你可以使用与之前相同的方式查看公钥详细信息,但是这次,输入公钥 .pem 文件:
1 2 3 4 5 6 7 8 9 10
alice $ alice $ openssl rsa -in alice_public.pem -pubin -text -noout RSAPublic-Key: (1024 bit) Modulus: 00:bd:e8:61:72:f8:f6:c8:f2:cc:05:fa:07:aa:99: 47:a6:d8:06:cf:09:bf:d1:66:b7:f9:37:29:5d:dc: c7:11:56:59:d7:83:b4:81:f6:cf:e2:5f:16:0d:47: 81:fe:62:9a:63:c5:20:df:ee:d3:95:73:dc:0a:3f: $
Bob 可以按照相同的过程来提取他的公钥并将其保存到文件中:
1 2 3 4 5 6 7 8 9
bob $ openssl rsa -in bob_private.pem -pubout > bob_public.pem Enter pass phrase for bob_private.pem: writing RSA key bob $ bob $ ls -l *.pem -rw-------. 1bob bob 986 Mar 2213:48bob_private.pem -rw-r--r--. 1bob bob 272 Mar 2213:51bob_public.pem bob $
步骤 3:交换公钥
这些公钥在 Alice 和 Bob 彼此交换之前没有太大用处。有几种共享公钥的方法,例如使用 scp 命令将密钥复制到彼此的工作站。
将 Alice 的公钥发送到 Bob 的工作站:
1 2
alice $ scp alice_public.pem bob@bob-machine-or-ip:/path/
将 Bob 的公钥发送到 Alice 的工作站:
1 2
bob $ scp bob_public.pem alice@alice-machine-or-ip:/path/
现在,Alice 有了 Bob 的公钥,反之亦然:
1 2 3 4
alice $ls-l bob_public.pem -rw-r--r--. 1 alice alice 272 Mar 2217:51 bob_public.pem alice $
1 2 3 4
bob $ ls -l alice_public.pem -rw-r--r--. 1bob bob 272 Mar 2213:54 alice_public.pem bob $
步骤 4:使用公钥交换加密的消息
假设 Alice 需要与 Bob 秘密交流。她将秘密信息写入文件中,并将其保存到 top_secret.txt 中。由于这是一个普通文件,因此任何人都可以打开它并查看其内容,这里并没有太多保护:
1 2 3 4 5 6 7
alice $ alice $echo"vim or emacs ?" > top_secret.txt alice $ alice $cat top_secret.txt vim or emacs ? alice $
alice $ openssl rsautl -encrypt-inkey bob_public.pem -pubin-in top_secret.txt -out top_secret.enc alice $ alice $ls-l top_secret.* -rw-rw-r--. 1 alice alice 128 Mar 2217:54 top_secret.enc -rw-rw-r--. 1 alice alice 15 Mar 2217:53 top_secret.txt alice $ alice $
alice $ alice $ ls -l reply_secret.enc -rw-r--r--. 1 alice alice 128 Mar 22 18:01 reply_secret.enc alice $ alice $ cat reply_secret.enc �F݇��.4"f�1��\��{o$�M��I{5�|�\�l͂�e��Y�V��{�|!$c^a �*Ԫ\vQ�Ϡ9����'��ٮsP��'��Z�1W�n��k���J�0�I;P8������&:alice $ alice $ alice $ alice $ hexdump -C ./reply_secret.enc 00000000 92 46 dd 87 04 bc a7 2e 34 22 01 66 1a 13 31 db |.F......4".f..1.| 00000010 c4 5c b4 8e 7b 6f d4 b0 24 d2 4d 92 9b 49 7b 35 |.\..{o..$.M..I{5| 00000020 da 7c ee 5c bb 6c cd 82 f1 1b 92 65 f1 8d f2 59 |.|.\.l.....e...Y| 00000030 82 56 81 80 7b 89 07 7c 21 24 63 5e 61 0c ae 2a |.V..{..|!$c^a..*| 00000040 d4 aa 5c 76 51 8d cf a0 39 04 c1 d7 dc f0 ad 99 |..\vQ...9.......| 00000050 27 ed 8e de d9 ae 02 73 50 e0 dd 27 13 ae 8e 5a |'......sP..'...Z| 00000060 12 e4 9a 31 57 b3 03 6e dd e1 16 7f 6b c0 b3 8b |...1W..n....k...| 00000070 4a cf 30 b8 49 3b 50 38 e0 9f 84 f6 83 da 26 3a |J.0.I;P8......&:| 00000080 alice $
所以,她使用 OpenSSL 解密消息,只不过这次她提供了自己的私钥并将输出保存到文件中:
1 2 3 4 5 6 7 8 9 10
alice $ openssl rsautl -decrypt-inkey alice_private.pem -in reply_secret.enc > reply_secret.txt Enter pass phrase for alice_private.pem: alice $ alice $ls-l reply_secret.txt -rw-rw-r--. 1 alice alice 14 Mar 2218:02 reply_secret.txt alice $ alice $cat reply_secret.txt nano for life alice $