https://segmentfault.com/a/1190000010312601
全部業務的正常運轉,離不開一個安全的運行環境,系統安全性直接關係到業務穩定、可靠、以及可用性,本章就介紹一些系統安全相關的話題。
保密性:confidentiality 完整性:integrity 可用性:availability
威脅保密性的攻擊:竊聽,通訊量分析 威脅完整性的攻擊:更改,假裝,重放,否定 威脅可用性的攻擊:拒絕服務(DoS)
技術:加密和解密 加密和解密: 傳統加密方法:替代加密方法,置換加密方法 現代加密方法:現代塊加密方法 服務:用於低於攻擊的服務,也就是爲了上述安全目標而特意設計的安全服務 服務: 認證機制 訪問控制機制
對稱加密:加密和解密使用同一個祕鑰;但加密算法和解密算法可能不一樣 工做過程爲: 發送者將發送的數據利用祕鑰,使用加密的算法加密成明文,發送給對方;接收方收到加密的數據後,利用同一個祕鑰,和解密的算法,將數據由密文解密成明文 常見的對稱加密算法: DES:Data Encryption Standard,56位祕鑰 3DES:Triple DES AES:Advanced Encryption Standard,支持128位、192位、256位、384位祕鑰 Blowfish Twofish RC6 CAST5 對稱加密特性: <1>加密解密使用同一個祕鑰 <2>將原始數據分隔成爲固定大小塊,逐個進行加密 對稱加密的缺陷: <1>祕鑰過多 <2>祕鑰分發困難 <3>數據來源沒法確認
公鑰:公鑰從私鑰中提取產生,能夠公開給全部人;pubkey 私鑰:經過工具建立,私鑰只能使用則本身留存,必須保證其私密性,secret key 特色:用公鑰加密的數據,只能使用與之配對的私鑰解密;反之,用私鑰加密的數據只能用與之配對的公鑰解密 用途: 數字簽名:主要在於讓接收方確認發送方的身份。將數據用單項加密(MD五、SHA)算法,得出來的特徵碼,用本身的私鑰進行加密,這就是數字簽名 祕鑰交換:發送方用對方的公鑰加密一個對稱加密的祕鑰,併發送給對方,以實現祕鑰交換 數據加密:通常不多用公鑰加密發送的數據自己,由於公鑰加密的加密效率很低,所以通常用對稱祕鑰加密要發送的數據自己 公鑰機密的工做模式: 模式一:公鑰加密,私鑰解密 B將數據發送給A,B就拿A的公鑰對數據進行加密,而後將加密後的數據發送給A,那此時,加密後的數據只能被A的私鑰進行解密,所以,即便有第三方拿到加密的數據,也沒法完成解密,只有A本身有本身的私鑰,所以實現了數據的保密性 模式二:私鑰加密,公鑰解密 A用本身的私鑰加密一份數據給B,加密後的數據只能被A的公鑰進行解密,所以,若是有第三方拿到加密後的數據,是可以解密的,由於A的公鑰是公開的,任何人均可以拿到,所以能夠解密 但此種方式的做用,並非真正拿來加密數據,而是用來進行身份驗證(數字簽名),也就是說,A用本身的私鑰加密一段數據(數據不是要發送的數據自己,而是要加密數據利用單向加密算法得出來的特徵碼),而後發送給B,B拿A的私鑰進行解密,可以解密成功,就證實發送方必定是A,由於只有A的公鑰能解開A的私鑰;一旦解開數據後,獲得的就是要發送數據的特徵碼,等後面真正發送數據後,能夠利用該段特徵碼,來驗證數據的完整性 公鑰加密的經常使用的算法: RSA:既能實現數字簽名,也能實現加解密 DSA:有時也被稱爲DSS,數字簽名標準。僅能實現數字簽名,不能實現加解密
特性: 定長輸出:不管原始數據多大,得出的特徵碼都是固定長度的 雪崩效應:原始數據的微小改變,將致使特徵碼的巨大變化 功能:主要用來實現驗證數據的完整性 常見的單向加密算法: MD5:Message Digest 5 消息摘要,5版本。128bit定長輸出 SHA1:Secure Hash Algorithm 1,160位定長輸出 SHA22四、SHA25六、SHA38四、SHA512
常見的交換算法: 公鑰加密:用對方的公鑰加密對稱祕鑰,這樣對方就能以本身的私鑰解開,從而得到對稱加密的祕鑰 DH(Deffie-Hellman)算法: <1> A: a,p 協商生成公開的整數a, 大素數p B: a,p <2> A:生成隱私數據 x, (x<p ),計算得出 a^x%p,發送給B B:生成隱私數據 y,計算得出 a^y%p,發送給A <3> A:計算得出 ( a^y%p) ^x = a^xy%p, 生成爲密鑰 B:計算得出 ( a^x%p) ^y = a^xy%p, 生成爲密鑰
A有一段數據要發送給B,A就用單向加密的算法計算出數據的特徵碼,然後A用本身的私鑰加密這段特徵碼,生成數字簽名,至此可以保證數據的完整性(經過比對特徵碼),和身份驗證(數字簽名),可是不能保證數據的保密性,由於數據自己還沒被加密。 所以,A會繼續在原有數據和數字簽名的基礎上,生成一個一次性的對稱加密祕鑰,而後利用對稱加密算法結合祕鑰,去加密原有數據和數字簽名。而後,A用B的公鑰,對對稱加密的祕鑰進行加密,並附加到以前利用對稱加密算法生成的數據的後面,而後發送給B 當B收到數據後,就用B本身的私鑰解密附加在後面的對稱加密的祕鑰,從而獲得了對稱加密的祕鑰(這就完成了祕鑰交換,實際是雙方都知道了對稱加密的祕鑰的過程就是祕鑰交換),而後利用對稱加密的祕鑰進一步解開數據和數字簽名,而後利用A的公鑰解開數字簽名,獲得數據自己的特徵碼,而後利用一樣的單項加密算法,計算出收到的數據的特徵碼,而後比對特徵碼,從而驗證數據的完整性
以上通訊過程當中仍是有一個嚴重的漏洞,就是當A和B鍵歷來沒進行過通訊,那麼A怎麼獲知B的公鑰,或者B怎麼獲知A的公鑰。假設當A沒B的公鑰時,向B發送請求,要求獲知B的公鑰,可是此時,若是有第三方C獲取到請求後,冒充本身就是B,而後將C本身的公鑰發送給A,A就認爲C就是B。而C又會冒充本身是A,向B進行通訊,從而也獲取了真正B的公鑰,而此後A和B通訊的過程當中,就都會交由C,數據的安全性就無從保障。這種狀況就是中間人攻擊
由四個部分組成: 簽證機構:CA機構 註冊機構:RA,至關於CA的派出機構,用於接收註冊申請 證書吊銷列表:CRL 證書存取庫:CB
CA:保證通訊雙方,可以可靠的拿到對方的公鑰(避免中間人攻擊),而設定的雙方都信任的第三方可信機構 A將本身的公鑰提請給CA,CA通過特殊的防僞處理後,將處理後的A的公鑰發送給A,處理事後的A的公鑰就稱之爲CA證書。之後,若是B若是請求要A的公鑰,那麼A就將CA證書發送給B,當B拿到證書後,不會立馬就職何該證書,而是要驗證該證書是不是合法的,還要驗證是不是B信任的CA機構頒發的,驗證完了以後,纔會承認 CA證書通常會包含:提請證書的人的名稱,提請人的公鑰,證書有效期,而後CA機構會用本身的私鑰,加密以上的一整段數據的特徵碼,而後將加密後的特徵碼(也就是數字簽名)附加在數據以後,這個總體就是CA證書 CA證書後面有CA機構用CA機構本身的私鑰對證書內容部分的特徵碼加密的數據,通訊方要解開此數字簽名就須要用到CA自身的公鑰,可是如何獲取到CA機構本身的公鑰,若是直接申請,那麼此時又會存在中間人攻擊的可能,所以,通常是CA機構會給本身發一個CA證書,而後獲取CA自身的證書,通常不能經過網絡發送,所以通常狀況下,是線下交易
X.509,定義證書結構和認證協議的標準,在X.509的標準中,定義了證書須要具有的結構: 版本號:是X.509的v1仍是v2仍是v3版本 序列號:CA機構所發出的證書的序列號 簽名算法ID:證書所使用的算法 發行者的名稱:CA機構本身的名稱 證書有效期限 主體名稱:提請CA證書的用戶的名稱 主體公鑰: 發行者的惟一標識:CA機構的ID 主體的惟一標識:提請者的ID 擴展信息 發行者的簽名:CA機構利用本身的私鑰對以上內容的特徵碼加密,生成的數字簽名,將數字簽名附加在證書內容以後,做爲證書的一部分
SSL:安全套接字層,由Netscape發佈於1994年,分爲V1.0、V2.0、V3.0但因爲其版權屬於Netscape公司,且各版本均被爆出有協議漏洞,所以使用的很少 TLS:Transport Layer Security,傳輸層安全,是國際互聯網工程師協會發布的相似於SSL的協議,其分爲V1.0、V1.一、V1.二、V1.3的版本,使用較多的是V1.2的版本
<1>最底層:基礎算法的原語的實現,如AES、RSA、MD5 <2>向上一層:各類算法的實現,也就是算法的具體實現的方式 <3>再向上一層:組合算法實現的半成品 <4>最高層:用各類組件拼裝而成的各類成品密碼學協議軟件;
OpenSSL由三部分組成: libencrypt庫:加密解密庫,專用於實現加密解密功能,主要由開發人員使用 libssl庫:用於實現ssl安全通訊機制的庫,主要由開發人員使用 openssl多用途命令行工具:openssl
客戶端向服務器端所要並驗證證書(證書裏面有服務器端的公鑰信息); 雙方協商生成對稱祕鑰; 雙方採用對稱祕鑰,進行加密通訊的過程 會話過程後,進行斷開
也就是雙方在正式開始SSL會話以前的通訊前商量加密算法和生成會話祕鑰階段的詳細過程介紹,(以HTTPS協議爲例) <1>第一階段:client-hello 客戶端向服務器端發送: 支持的協議版本,如:tls1.2 客戶端生成一個隨機數,用於稍後生成對稱祕鑰 支持的加密算法,好比AES、RSA、SHA 支持的壓縮算法 <2>第二階段:server-hello 服務器端向客戶端發送: 確認使用的加密通訊的協議版本,如tls1.2 生成一個隨機數,用於稍後生成對稱祕鑰 確認使用的加密算法 向客戶端發送服務器證書 若是有必要,有可能會向客戶端索要客戶端的證書(如:當客戶端請求的是網銀頁面時) <3>第三階段:客戶端收到服務器端的server-hello後給出的迴應 驗證服務器證書,若是沒問題,則經過解密證書獲取到服務器的公鑰; 驗證的內容: 發證機構:驗證發證機構是不是可信的,也就是驗證證書籤名(CA的數字簽名) 證書的完整性,也是驗證證書的數字簽名裏面的解密出來的特徵碼 證書的持有者:驗證證書裏面的持有者是否與要訪問的頁面是一致的 證書有效期 證書是否被吊銷 發送如下信息給服務器端: 一個隨機數,用於生成對稱祕鑰 編碼變動通知:表示隨後的信息都將用雙方商定的加密方法和祕鑰發送 客戶端握手結束通知:表示客戶端在正式通訊前的握手階段結束 <4>第四階段:服務器端 收到客戶端發來的最後一個隨機數後,利用含此隨機數在內的一共三個隨機數生成對稱祕鑰; 向客戶端發送如下信息: 編碼變動通知:表示隨後的信息都將用雙方商定的加密方法和祕鑰發送 服務器端握手結束通知:表示服務器端握手階段已經結束
A、B雙方要進行通訊時:A爲客戶端,B爲服務器端 <1>A發送hello信息給B,B接收後,發送hello信息給A,此時爲雙方創建通訊前的確認,須要協商雙方真正通訊時所用到的加密算法,包括單向加密、對稱加密、公鑰加密、祕鑰交換用的方法 <2>A請求B的證書,B因而將本身的證書(CA處理後的公鑰)發送給A 通常狀況下,客戶端不會有證書提供給服務器端,由於一方面是證書的使用費使得客戶端不會去用,另外一方面客戶端訪問服務器端的時候,通常不會驗證客戶端的身份,好比訪問某網站,網站不會要求客戶端有證書才響應內容給客戶端,而客戶端是要驗證服務器端的證書的,由於爲了防止訪問的網站的正確性,防止釣魚網站等。 但有時服務器端也會驗證客戶端的證書,好比當客戶端訪問的是網銀頁面的時候,會驗證證書,當咱們去銀行開通網銀的時候,通常會有個加密狗之類的東西,其實裏面存儲的就是用戶本身的ca證書,只是通常該ca證書的頒發機構不是市面上公認的CA機構,而是銀行本身建的一個CA簽發機構,僅對本身銀行內部有效 <3>A收到B的證書後,驗證B的證書,若是驗證沒有問題 <4>A驗證B的證書沒問題後,生成一個隨機數,做爲對稱加密的祕鑰,A利用雙方以前協商的祕鑰交換算法(假設爲公鑰加密),則將此祕鑰用B的公鑰加密後發送給B <5>B收到A發送過來的密文的祕鑰後,利用本身的私鑰,解密得出對稱加密的祕鑰,而後利用對稱加密的祕鑰和以前協商的對稱加密的算法,給A發送A所請求的數據,進行正常數據的發送 <6>當正常的數據傳輸完成後,A(客戶端)請求通訊斷開,服務器也斷開,而後通訊終止
openssl命令行工具備衆多子命令,主要分爲三類: 標準命令:enc、ca、req、genrsa… 消息摘要命令(dgst子命令相關) 加密命令(enc子命令相關) <1>使用openssl命令行工具完成對稱加密: 工具:openssl enc子命令 支持的算法:aes、des、3des等 enc命令的用法: openssl enc -CIPHERNAME -e|d -in /PATH/TO/FILE -out /PATH/TO/FILE 選項解釋: -CIPHERNAME:加密的算法的名稱,可經過openssl –help查看所支持的加密算法的名稱 -e|d:-e表示加密,-d表示解密 -in /PATH/TO/FILE 要加密的文件 -out /PATH/TO/FILE 加密後的文件 -pass STRING 表示對稱加密的祕鑰是什麼 -a|-base64 表示以base64文本格式進行編碼,若是不指定,多是以二進制格式進行編碼 如對/testdir/file1進行對稱加密: openssl enc -des3 -e -a -salt -in /testdir/file1 -out /testdir/jmfile1 輸入後回車,會要求輸入對稱加密的祕鑰,輸入完成,便可完成加密 -des3表示採用des3的加密算法,-a表示以base64文本格式進行編碼,-salt表示加點雜質 解密上面加密的文件: openssl enc -des3 -d -a -salt -in /testdir/jmfile1 -out /testdir/file2 輸入後回車,會要求輸入對稱加密的祕鑰,輸入完成,便可完成解密
[root@localhost ~]# echo "1 2 3 4 5" > f1 [root@localhost ~]# cat f1 #原始文件 1 2 3 4 5 [root@localhost ~]# openssl enc -des3 -e -a -salt -in f1 -out f1.m enter des-ede3-cbc encryption password: #使用3des對稱加密算法,對原始文件進行加密,輸入對稱加密的祕鑰 Verifying - enter des-ede3-cbc encryption password: [root@localhost ~]# cat f1.m #加密後文件內容 U2FsdGVkX1+C+zxYYZ2mnH/Jhae8XNmly3SzFVeT738= [root@localhost ~]# openssl enc -des3 -d -a -salt -in f1.m -out f2 enter des-ede3-cbc decryption password: #解密,要求輸入加密時使用的對稱加密祕鑰 [root@localhost ~]# cat f2 #解密文件 1 2 3 4 5
<2>單向加密css
工具:openssl dgst、md5sum、sha1sum、sha256sum… 用法: md5sum /PATH/TO/FILE sha1sum /PATH/TO/FILE openssl dgst -md5|-sha1… /PATH/TO/FILE
[root@localhost ~]# md5sum f1 9f96ef92fe742165873c313662f1f2b8 f1 [root@localhost ~]# openssl dgst -md5 f1 MD5(f1)= 9f96ef92fe742165873c313662f1f2b8 [root@localhost ~]# sha1sum f1 63b956989fab15e957086b98295ca0cdd69eb0b7 f1 [root@localhost ~]# openssl dgst -sha1 f1 SHA1(f1)= 63b956989fab15e957086b98295ca0cdd69eb0b7 [root@localhost ~]# sha512sum f1 cc7818f71e5669a72d45c9563a59e4db18ed899982eab1f884c4c4a58a7f0b63b5f4d750c1caa88e1cfff311a0cb7776f831b8af3beb3bf2cc7a73fe761f0c7e f1 [root@localhost ~]# openssl dgst -sha512 f1 SHA512(f1)= cc7818f71e5669a72d45c9563a59e4db18ed899982eab1f884c4c4a58a7f0b63b5f4d750c1caa88e1cfff311a0cb7776f831b8af3beb3bf2cc7a73fe761f0c7e 只要原始文件沒有發生改變,使用同種加密算法計算出來的特徵碼必定同樣
<3>生成用戶密碼的命令:算法
工具:passwd、openssl passwd 例如: openssl passwd -1 -salt 12345而後回車,會提示要求輸入密碼,輸入完成後,便可生成加密後的密碼 -1 表示使用md5方式加密 -salt STRING表示生成密碼時加入的雜質的內容 -salt後面加的雜質的內容能夠用隨機數生成,生成隨機數能夠用openssl的子命令生成 openssl passwd -1 -salt `openssl rand -hex 4`
[root@localhost ~]# openssl passwd -1 -salt "abcde" Password: $1$abcde$OmqJ.85QGvaLaaHqbRijw1 #-1表示使用MD5的加密算法,加入的雜質爲abcde,而後輸入密碼,就生成基於MD5加密後的加密字符串 [root@localhost ~]# openssl passwd -1 -salt `openssl rand -hex 4` Password: $1$d7dc4cfb$DA8Cq0zbnt0P2afb4X6zs1 #使用openssl自帶的生成隨機字符串工具做爲加密雜質
<4>openssl生成隨機數:shell
工具:openssl rand 用法:openssl rand [-out FILE] [-base64] [-hex] NUM -out FILE 表示將生成的隨機數保存在某個文件中 -base64 表示使用base64編碼,生成的隨機數後面可能會有=,要去掉=後纔是真正的隨機數 -hex 表示使用十六進制數字編碼 NUM 表示生成隨機字符串的長度 如: openssl rand -base64 10 表示生成一個10個字節的隨機數,採用base64編碼格式進行輸出 openssl rand -hex 10 輸出10個字節的16進制字節長度的隨機數,至關於輸出20個字符 Linux上的隨機數生成器: /dev/random:僅從熵池中返回隨機數,當隨機數用盡,會阻塞後續請求隨機數的應用 /dev/urandom:從熵池中返回隨機數,隨機數用盡,會利用軟件生成僞隨機數,不會阻塞。僞隨機數不安全 熵池中隨機數的來源: 硬盤I/O中斷時間間隔 鍵盤I/O中斷時間間隔
[root@localhost ~]# openssl rand -hex 5 76ebc802ee [root@localhost ~]# openssl rand -base64 5 Vmn4PbI= [root@localhost ~]# openssl rand -hex 10 95faaee7d3ba04d588ae [root@localhost ~]# openssl rand -hex 10 add09e02712965f5b064
<5>openssl實現公鑰加密:segmentfault
加密解密: 支持的算法:RSA、ELGamal 工具:openssl rsautl 數字簽名: 支持的算法:RSA、DSA、ELGamal 工具:openssl rsautl 祕鑰交換 支持的算法:DH、RSA 生成私鑰:(公鑰通常不須要生成,而是自動的會從私鑰中提取產生) openssl genrsa 512|768|1024|2048…表示生成一個長度爲5十二、768…位的私鑰 openssl genrsa 1024 > /PATH/TO/FILE 表示生成一個1024位的私鑰保存到文件中 openssl genrsa 1024 -out /PATH/TO/FILE 也表示生成一個1024位的私鑰保存到文件中 生成的私鑰文件,不能讓其餘人訪問,所以通常要將私鑰文件的權限變成600,爲了簡化步驟,能夠直接在生成私鑰時就定義其權限,如: (umask 077;openssl genrsa 1024 -out /PATH/TO/FILE) 用了小括號,至關於在一個子shell中運行,所以此時的子shell的umask設置僅對子shell生效 從私鑰中提取公鑰:通常不用手工提取 openssl rsa -in /PATH/TO/私鑰文件 -pubout 表示從私鑰文件中提取出公鑰
[root@localhost ~]# openssl genrsa 1024 #利用rsa算法生成1024位私鑰 Generating RSA private key, 1024 bit long modulus ......++++++ .......++++++ e is 65537 (0x10001) -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDJOWuZALVnZa+E2pdJV5IOkJUZQ6gomne6OS3Jh4FqYEv4tHRg MJ6szKLvX4ZNYdabGwqlrTLiWhC4rEKhlgD+RnEREObhCGhbjhffkcLgqg9UFg2h Hu7pN9p/ecUr2YNQZO8+BdoXgvkSK8KwHudmin4M3NhfZxpH49dXje5xGQIDAQAB AoGBAJL23g/0RYlL6iJU6DOHwsPicxLtqA5nqtQW2Mscrbd8t1/gpDJwsCMynjnI AbXYpD3KRT91vPk2oInQPiX4AaZpJLAJTVnfv7kZv6f0RtGLdCJF/onsjLse9yuE eWon+MkK6UMOU8fYCtWwfCQvTp5pTWgXPrTALpeRiPsTLv6BAkEA6nZQZIgXgVDf RzLN65MT5Awy/CVBj793HPXlvTgRt722Sn+efT2T9ZxHUcnLBRUWnUN7WrGbYf51 V9g8k+Fk0QJBANu1eWKHTNtFoG9NlqcmkG/ffTtMcnneWZ3QdhjLg6Xgh+z+nhYf +zvWwhguG5D6opdyeQ1Zbk63b009ty43+ckCQQCN6SzBnIm1kLCEFKEEjBIG/sdB TH+BNR8wXTk/rRc0QlR6hQH1xfavO3cDbwM9wUTdzQF1pHhq+Kwnjk8kJtFxAkB4 /HjoeesnwDK1t/si9oiJIn+6vME5POkKj3XI96D6IieXqSpyso/NhtiBKjrB3lLU pRPl9v5YWIjw9vA9glOJAkBgWRDjR5aiCJxMh5mKplxPtoCdiAobyNgQi8Aux6eR wlHwOW7y20hgjcmytj29ZvabZhPKw7FM/QkAJ6+iPAeS -----END RSA PRIVATE KEY----- [root@localhost ~]# openssl genrsa 1024 > f1 #將私鑰重定向到某個文件中 Generating RSA private key, 1024 bit long modulus .................................................................++++++ ......++++++ e is 65537 (0x10001) [root@localhost ~]# cat f1 -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDEAFnlfWWmLZs4kCA3nakGAJL5QBNVyzHBkL+MzzBOE7uDyzxU 4WS58uCpQw8pZShZIdR5SaUlwneYfVw37rJgu2M67Q58IamuQvab37DPDJ2XfxW8 eTRH6/tjwqs71tE5/8O8zIUBWNaSIZvS0xkrEmG/DyXPibpF3QvuPZYinwIDAQAB AoGBAJMv7FJRM8dyUjFM0lTRmb9/KN/yhVKVL707dQ1J/e10Fgnn0luvk1Osl5ek Wztr0rv0krmuW02a1vL1mQ4Lu3lkIz+m99D+YCKzZRjCOl1loQi70TMIOX+jRRsq 08kGw8zxvPFjhCn90SO68/9x5+K8m2VD177aZ/ePEu6LNN/hAkEA+8h/YtsdeiK5 RAYf1w3A1urTjV92izRrKwhIEdT+evzRICTg0RjX3MWP4BoDZFw/+Obyq/7jnMro WrXX/bxPcQJBAMdIsWfnVP0cCU+Q9yvMr7dg+Pct5uCfizVZQZcoEAn3gGnYUkqo F885jDlyJrTldPDtQv/qIvFY0vO+4wnNqw8CQQCIBz+DWhwn00DCloh3OE/6DO50 j6HM/Wn02smNEMTYD2SweBwZ+9ELzpS3n3Y7r3dEcwmikNfJ6vnzoBDsXeORAkAX DiPoH21Hsxyopd7SpGWX05I6FodlaU/TpjXeZPYmEQo8NJigpn3KrZ+5balouDsl PG3J6a6NOXd+V5EwqyilAkAfYKS+6OWE3jRV5vu0YFzUt3c0dYqgT2rlCTWAFNjd MJX1YVZi7c3XrxcRhbakzgqW1du/1Z2ySebWKz+lkP4H -----END RSA PRIVATE KEY----- [root@localhost ~]# openssl genrsa -out f1 1024 #利用rsa算法生成1024位私鑰,保存某文件中,注意公鑰的長度,要寫在保存文件以後。 Generating RSA private key, 1024 bit long modulus ..........................++++++ ...................................................++++++ e is 65537 (0x10001) [root@localhost ~]# cat f1 -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQC6amq8ptKmEhF4JIbN9+RVc8WOaLPMuIbZ+l7kDcKZq1K8W4QX Ur07w0U6zDzGFcykqYhyCn8+eiF/OxqPOnqlibgoPwg9jwtuYJGZN5MvkNmQMniv dyY1ThkAF/hDowbmY4aputAzJ9glduWpGBwp0/xgFIPnP8fGk/nB9P6wfQIDAQAB AoGAPwNDyzs0z1AiOZNXQf4+X6g/qlC4HkZtxvb75mjEU/92excQQnYEY1QxbZum G2s4/pwT9ECaHHtaIVDQPIQO+pwuHyKnBLa8+AkYl04aUAYVDwaBbSBONEsFGVIa xpZH3c1lugBdweBLchhvJyzv9f1R5LUQe2ZDK0FuOaVNFwECQQDcnOmzbmr0g3GG Z/xrYVlQOTSSxkNf7Bw1MJZpkArLv4Dy/9DPHHEsIxsHOk/76m6J519qluaYTxqu fRgTdOU9AkEA2FFA3uUMSE1puHJLihZVCk/wQCKcssdFTtXNwPzwka71y0UW0EVi NN75FJrueGjXzmw0Lk8hdvDwt47RMzIsQQJAH36XLnJ4+mc5ccKumnXPVlCUXM/J FoySilVhY7iYkfXI5uf2W1roHTD1ztZYTNJu7WkGiiT4zo2cdYSOR1jM0QJBAL08 N7fGQDxwHHBS7GpcpwBidhZlMRfk42jX+Ss/G2UW3cd5JUAFsqf194hjEQMdFM1s Mynf57KZjLvHoJNc7QECQFVzZFAL6wUobFUI7WreU3qELC2MbN9uxgYAbzJXX0mx f2awbPIJ4brvilS5u/f61+enDITl6+VPJvXwSjTVJi0= -----END RSA PRIVATE KEY----- [root@localhost ~]# (umask 066;openssl genrsa -out ff 512) Generating RSA private key, 512 bit long modulus .............++++++++++++ #rsa算法生成512私鑰,保存文件中,權限600 .........................................++++++++++++ e is 65537 (0x10001) [root@localhost ~]# ll ff -rw-------. 1 root root 497 Jul 20 01:40 ff [root@localhost ~]# cat ff -----BEGIN RSA PRIVATE KEY----- MIIBPAIBAAJBAOF2ErTafwojYWAo99h73Pk6hKUe8frO+edoVAUpZYaIHvqLeJIY EEdnBkqkatiKMXihwQXtM6WIqDwtfLJjy3kCAwEAAQJBAJbHE7OG+7aX+qMIQtev 3hN+ov6aN1F34YB0MNxS1uakGB16GD+qbUzKxXzWzcvruc1sfAfwAwr+uRXQ+CVy UVECIQD58RKUdjh04rOW0Ao6WmBRl0cl2JXEA83rYwYSjVGk4wIhAObtGGkoK7K3 GwS1Gq0lxLixKfQlHf1jJnIOh2H6BRjzAiAhguwd0bgCG/8+QkiMyF9PsTvN3DtA W845OD6xMBd5RwIhANMDqKC+sl+Wbjv4+a1qq75RNZMBL8xRA9qJaDChdHL9AiEA 0WSA38W0INfBHknOUf+nphr01ismlGSvaSTzfEMdXQQ= -----END RSA PRIVATE KEY----- [root@localhost ~]# openssl rsa -in ff -pubout writing RSA key #手動從文件中提取公鑰 -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOF2ErTafwojYWAo99h73Pk6hKUe8frO +edoVAUpZYaIHvqLeJIYEEdnBkqkatiKMXihwQXtM6WIqDwtfLJjy3kCAwEAAQ== -----END PUBLIC KEY----- [root@localhost ~]# openssl rsa -in ff -pubout -out ff writing RSA key #私鑰中提取公鑰,提取公鑰保存指定文件中,私鑰同樣,提出的公鑰也同樣。 [root@localhost ~]# cat ff -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOF2ErTafwojYWAo99h73Pk6hKUe8frO +edoVAUpZYaIHvqLeJIYEEdnBkqkatiKMXihwQXtM6WIqDwtfLJjy3kCAwEAAQ== -----END PUBLIC KEY-----