<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 一、概述 **X.509**:這是一種證書標準,主要定義了證書中應該包含哪些內容.其詳情可以參考RFC5280,SSL使用的就是這種證書標準; **自簽名證書和CA簽名證書** 自簽名的證書無法被吊銷,CA簽名的證書可以被吊銷; ## 二、各種術語 ### **證書編碼格式** **PEM**:Privacy Enhanced Mail,是ASCII編碼格式; **DER**:Distinguished Encoding Rules,是二進制編碼格式,可包含所有私鑰、公鑰和證書。它是大多數瀏覽器的缺省格式,并按 ASN1 DER 格式存儲。它是無報頭的。可以說,PEM 是用文本報頭包圍的 DER; 兩種證書編碼可以轉換; **PEM轉為DER**: ``` openssl x509 -in cert.crt -outform der -out cert.der ``` **DER轉為PEM**: ``` openssl x509 -in cert.crt -inform der -outform pem -out cert.pem ``` ### **證書文件后綴** **DER**:DER編碼證書; **PEM**:PEM編碼證書; **CRT**:常見與Unix/Linux操作系統,有可能是PEM編碼,也有可能是DER編碼,包含公鑰和主體信息,證書中沒有私鑰,CRT和CER幾乎一樣; **CER**:常見于Windows系統,同樣的,可能是PEM編碼,也可能是DER編碼,包含公鑰和主體信息,證書中沒有私鑰,Windows下有工具可以轉換CRT到CER; **PFX/P12**:包含**公鑰**和**私鑰**,證書交換格式,后綴為pfx或p12; **JKS**:即Java Key Storage,這是Java的專利,跟OpenSSL關系不大,利用Java的一個叫"keytool"的工具,可以將PFX轉為JKS,當然了,keytool也能直接生成JKS; ### **非證書文件后綴** **KEY**:通常用來存放一個公鑰或者私鑰,并非X.509證書,編碼可能是PEM,也可能是DER; **CSR**:Certificate Signing Request,即證書簽名請求,這個并不是證書,而是向權威證書頒發機構獲得簽名證書的申請,其核心內容是一個公鑰和主體信息,在生成這個申請的時候,同時也會生成一個私鑰文件,需要保存; ### **公鑰私鑰** 公鑰(Public Key)與私鑰(Private Key)是通過加密算法得到的一個密鑰對(即一個公鑰和一個私鑰,也就是非對稱加密方式)。 公鑰可對會話進行加密、驗證數字簽名,只有使用對應的私鑰才能解密會話數據,從而保證數據傳輸的安全性。公鑰是密鑰對外公開的部分,私鑰則是非公開的部分,由用戶自行保管; 通過加密算法得到的密鑰對可以保證在世界范圍內是唯一的。使用密鑰對的時候,如果用其中一個密鑰加密一段數據,只能使用密鑰對中的另一個密鑰才能解密數據。例如:用公鑰加密的數據必須用對應的私鑰才能解密;如果用私鑰進行加密也必須使用對應的公鑰才能解密,否則將無法成功解密。 ## 三、keytool工具 openssl和keytool是常用的兩個生成證書的工具; ### **概述** jdk自帶的證書管理工具叫keytool,可以用來生成自簽名證書、導入導出證書、打印證書信息等; keystore和truststore keystore: keytool生成證書的存儲庫,用來存儲若干條目,每一條目包含公私鑰,主體信息等;默認為用戶目錄下.keystore,相當于一個有密碼保護的文件; truststore: 與keystore格式相同,但是為區分只用來存放信任的證書,不存密鑰等信息; ### **常用命令** -genkey:在用戶主目錄中創建一個默認文件".keystore",還會產生一個mykey的別名,mykey中包含用戶的公鑰、私鑰和證書; -alias:產生別名; -keystore:生成秘鑰庫的存儲路徑和名稱; -storepass:指定秘鑰庫的密碼(獲取keystore信息所需的密碼); -keypass:秘鑰口令; -keyalg:指定密鑰的算法 (如 RSA DSA(如果不指定默認采用DSA)); -validity:指定創建的證書有效期多少天; -keysize:指定密鑰長度; -dname:指定證書擁有者信息 例如: "CN=名字與姓氏,OU=組織單位名稱,O=組織名稱,L=城市或區域名稱,ST=州或省份名稱,C=單位的兩字母國家代碼"; -export:將別名指定的證書導出到文件; -file:參數指定導出到文件的文件名; ## 四、openssl制作 使用openssl來制作證書; ### **CA** ``` openssl req -newkey rsa:2048 -x509 -nodes -sha256 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt ``` 輸入相關信息,生成ca.crt證書和ca.key; ![](https://img.kancloud.cn/20/8a/208a9ef57e3c70807e6bd141da877290_1051x335.png) >[danger] 注意,后面服務器端證書和客戶端證書都是用這個相同的ca.crt來制作的; ### **服務器端** 生成服務器端的key; ``` openssl genrsa -des3 -out server.key 2048 ``` 輸入密碼,如rayframework,生成server.key; ![](https://img.kancloud.cn/40/9c/409c5787283596f3b6fee859b36235b6_1045x122.png) 生成服務器端待發送的CSR; ``` openssl req -out server.csr -key server.key -new ``` 輸入剛才生成server.key的密碼,如rayframework,以及組織信息等,然后challenge密碼可以不要填寫,生成待發送CA的server的CSR; ![](https://img.kancloud.cn/4c/b5/4cb59fe0849aafb38e6e7dd5280e1fd4_1050x338.png) 發送CSR到CA用CA的key來簽名,生成服務器端證書: ``` openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 36500 ``` 執行后,生成server.crt了; ![](https://img.kancloud.cn/6f/cd/6fcdd168abcf2aa7ec34ebeb75da0ecb_1052x95.png) ### **客戶端** 生成客戶端key; ``` openssl genrsa -des3 -out client.key 2048 ``` 輸入客戶端密碼,如rayframework,生成client.key; ![](https://img.kancloud.cn/70/4e/704e6440d614960cc4a2bfdefb316e0a_1057x125.png) 生成客戶端CSR; ``` openssl req -out client.csr -key client.key -new ``` 輸入剛才生成client.key的密碼,如rayframework,以及組織信息等,然后challenge密碼可以不要填寫,生成待發送CA的client的CSR; ![](https://img.kancloud.cn/4b/27/4b274e72dedfd484583e24d6c1be4b8b_1046x334.png) 發送CSR到CA用CA的key來簽名,生成客戶端證書: ``` openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500 ``` 執行后,生成client.crt了; ![](https://img.kancloud.cn/41/17/4117af82371b2d1a28ccf22ed9944f71_1052x97.png) ## 五、常見問題 ### **解決服務器啟動每次都要輸入Enter PEM pass phrase** 把服務器端的key里面的key剝離掉就好了; ``` openssl rsa -in server.key -out server.key.unsecure mv server.key.unsecure server.key ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看