[SSH/SSL] Creating Certificate

  • Creating Certificate
  • 建立憑證是OpenSSL Programming裡的一項重要的前置工作,這裡我介紹使用CA.pl來製做Server跟Client的憑證。

    製作憑證的一個簡單流程圖如上圖,概略描述如下:

    • 產生Self-Sigh Root CA 憑證中心
    • 產生Server的Private key
    • 使用Server的Certificate Request(csr)+CA的Private Key(簽名)來產生Server的Public Key
    • 產生Client的Private key
    • 使用Client的Certificate Request(csr)+CA的Private Key(簽名)來產生Client的Public Key
    • 最簡易的方式就是這五個步驟(如同圖上由CA.pl連出來的五條線)


    概略的了解這樣一個製作過程後,我以ubuntu為例來製作Certificate,如果你是透過apt-get來安裝openssl的話,你的CA.pl的路徑如下:

    • /usr/lib/ssl/misc/

    如果你是自行安裝OpenSSL,且沒有設定路徑的話,那你的CA.pl會在這裡

    • /usr/lcoal/ssl/misc


  • RootCA
  • 產生RootCA,請用以下指令

    • CA.pl -newca

    接著他會要你設定一組密碼給CA。再來你就依照螢幕指示輸入相關憑證訊息即可,要注意的是最後他會問你要不要設定Extra attributes,你就直接按Enter跳過。

    產生完後在你的openssl資料夾下,例如:

    • /usr/local/ssl/misc/demoCA

    裡面就會有分別以下目錄與資料

    • cacert.pem <-- CA的public key
    • private <-- CA的private key所在的資料夾
    • crl <-- Certificate Rovoke List (註銷的憑證清單目錄)
    • newcerts <-- CA所簽發過的憑證

    而一般OpenSSL Programming你會先用到的cacert.pem,其餘的之後使用到再說。如果你沒有要建立,ChildCA,那麼CA的建立就完成了(別忘了你的CA的密碼,之後簽發時要使用到)。

  • Server Key/Certificate
  • 產生Server的Private Key請輸入

    • CA.pl -newreq

    接著他會要你設定一組密碼給Server的Private key使用,接著你就按照螢幕上的指示去設定即可,最後的Extra attributes,你也直接按Enter跳過即可。

    產生完後會在你的openssl資料夾,例如

    • /usr/loca/ssl/misc/

    裡面會出現如下檔案:

    • newkey.pem <-- Server的Private Key
    • newcsr.pem <-- Server的Certificate Request

    有了Private Key和csr之後,我們要再建立Server的Public Key,輸入下面的指令

    • CA.pl -sign

    這時你就要輸入CA的密碼了,其餘皆按照螢幕指示操作即可,產生完後也會在剛剛那個目錄下多了一個檔案:

    • newcert.pem <--- Server的public key

    如此一來Server的Public & Private Key都產生好了,你可以把newcsr.pem刪除,然後把newkey.pem, newcert.pem重新命名完後移至別的資料夾裡保存。

  • Client Key/Certificate
  • Client的Key/Certificate產生方式跟Server一模一樣,因為不管你的憑證是要給Server還是Client,對rootCA而言,這些都是他的子層級,沒有任何差別。

    總結一下,產生完後你會有以下五個Programming必備的檔案

    • CaPuk.pem (CA的Public Key,由cacert.pem改命名而來)
    • SrvPrK.pem(Server的Private Key由產生Server的憑證過程時,將newkey.pem改名而來)
    • SrvPuK.pem(Server的Public Key由產生Server的憑證過程時,將newcert.pem改名而來)
    • CliPrK.pem(Client的Private Key由產生Client的憑證過程時,將newkey.pem改名而來)
    • CliPuK.pem(Client的Public Key由產生Client的憑證過程時,將newcert.pem改名而來)

    CaPuK.pem, SrvPuK.pem, SrvPrK.pem, CliPuK.pem, CliPrK.pem這五個檔案好好保存,在下一篇[SSH/SSL] OpenSSL Programing : Connection裡會用到。

    #關於Windows用戶如果無法使用CA.pl的使用者,你可以使用傳統建立憑證的指令來產生(先切換到openssl.exe所在的目錄底下,一般沒有設定的話會在c:\usr\local\ssl\bin):

    RootCA:

    • openssl genrsa -des3 -out ca.key 4096
    • openssl req -new -x509 -days 365 -key ca.key -out ca.crt

    Server:

    • openssl genrsa -des3 -out server.key 4096
    • openssl req -new -key server.key -out server.csr
    • openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out serve

    Client:

    • openssl genrsa -des3 -out client.key 4096
    • openssl req -new -key client.key -out client.csr
    • openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out serve

    雖然用傳統的方式要多打一些指令,但是同時你也可以發現你有比較多的參數可以設定,像是密碼的位元數,憑證的期限,以及加密的規格,再者透過上面的指令你更能了解憑證產生以及簽署的關聯。

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas