天天看點

64位win10系統+VS2010下 OpenSSL的安裝編譯、證書生成

準備階段

  1. 下載下傳ActivePerl,網址:https://www.activestate.com/activeperl/downloads

    或者Strawberry Perl,網址:http://strawberryperl.com/

    (PS:安裝Strawberry Perl過程更容易)

  2. 下載下傳nasm彙編器(nasm-2.13rc18-win64),網址:https://www.nasm.us/
  3. 下載下傳Microsoft Visual Studio 2010,網址:https://msdn.itellyou.cn/

    (PS:找到VS2010,可複制連結通過迅雷下載下傳)

  4. 下載下傳OpenSSL壓縮包(openssl-1.0.0a),網址:https://oomake.com/download/openssl(此連結可以下到較早版本)

    或通過官網下載下傳:https://www.openssl.org/

安裝階段

  • 安裝Strawberry Perl、nasm彙編器、Microsoft Visual Studio 2010,并将安裝路徑添加到系統環境變量。

    例如:我的電腦 -> 右鍵屬性 -> 進階系統設定 -> 環境變量,選中系統變量中的Path,點選編輯,添加 D:\Microsoft Visual Studio 10.0\VC\bin;D:\Perl64\bin;C:\windows\system32

  • 安裝openssl
    • 先把openssl-1.0.0a.tar 解壓:D:\OpenSSL\openssl-1.0.0a
    • 開始菜單找到,Visual Studio x64 指令提示(2010),并運作
    • 在上述指令提示視窗進行以下操作
    1. 進入openssl的目錄

      cd D:\OpenSSL\openssl-1.0.0a

    2. 接着執行指令(64位):

      perl Configure VC-WIN64A no-asm -prefix=D:\OpenSSL\openssl64

      32位指令 :

      perl Configure VC-WIN32

      PS:prefix後面的位址是安裝目錄,自己設定即可。若沒有設定prefix動态庫就會安裝在out32dll目錄下(本文未指定);若下載下傳的是高版本openssl,則需要加是no-asm,表示不使用彙編,否則後續nmake指令會出錯。編譯成功會有Configured for VC-WIN64A提示
    3. 執行指令:

      ms\do_nasm

    4. 執行指令:

      ms\do_win64a

    5. 環境再配置:先定位到VS2010安裝目錄,執行指令

      cd D:\Microsoft Visual Studio 10.0\VC\bin\amd64

      ,再執行指令:

      vcvars64.bat

      。會顯示:Setting environment for using Microsoft Visual Studio 2010 x64 tools
    6. 再次将指令提示符定位到openssl源碼目錄下,

      cd D:\OpenSSL\openssl-1.0.0a

      ,再執行指令:

      nmake -f ms\ntdll.mak

      ,編譯動态庫。

      執行完後會在目錄下生成out32和tmp32兩個檔案夾。

    7. 測試上一步是否編譯成功,

      nmake -f ms\ntdll.mak test

      ,如果成功則最後顯示“ passed all tests ”字樣。安裝:

      nmake -f ms/ntdll.mak install

PS:本人在win10系統下,nmake -f ms/ntdll.mak install,這條指令無法完成,但該有的檔案都已經有了,不影響後續程式設計。證書生成,本文後續有附。

  • 補充指令
    • 測試OpenSSL動态庫:

      nmake -f ms/ntdll.mak test

    • 測試OpenSSL靜态庫:

      nmake -f ms/nt.mak test

    • 安裝OpenSSL動态庫:

      nmake -f ms/ntdll.mak install

    • 安裝OpenSSL靜态庫:

      nmake -f ms/nt.mak install

    • 清除上次OpenSSL動态庫編譯以重新編譯:

      nmake -f ms/ntdll.mak clean

    • 清除上次OpenSSL靜态庫編譯以重新編譯:

      nmake -f ms/nt.mak clean

證書生成

  • 在“D:\OpenSSL\openssl-1.0.0a”目錄下,建立“bin”,“include”,“lib”,“ssl”目錄;
  • 将apps目錄下的openssl.conf檔案複制到Bin和SSL目錄下;
  • 将out32dll目錄下的openssl.exe,libeay32.dll和ssleay32.dll複制到Bin目錄下;
  • 将out32dll目錄下的libeay32.lib和ssleay.lib複制到Lib目錄下;
  • 将inc32目錄下的openssl目錄複制到Include目錄下;
  • 将apps目錄下的demoCA目錄以及根目錄下的crypto目錄複制到Bin目錄下;
  • 由于接下來還需要使用OpenSSL進行程式設計,是以還需要進行程式設計環境的配置,把inc32目錄下的include目錄複制到VS2012的VC目錄下的include目錄,把out32dll目錄下的libeay32.lib和ssleay.lib複制到VS2012的VC目錄下的lib目錄下,同時把ibeay32.dll和ssleay32.dll複制到系統目錄(C:\windows\system32)下。

    PS:最後一步視個人情況而定,可不要。

然後進入“ D:\OpenSSL\openssl-1.0.0a\bin ”目錄下執行以下指令即可完成證書生成。

  • 生成伺服器端的私鑰(key檔案),指令成功執行之後,會在Bin目錄下面生成server.key檔案。
openssl genrsa -des3 -out server.key 1024  
           
  • 生成伺服器端的csr檔案,指令成功執行之後,會在Bin目錄下面生成server.csr檔案
openssl req -new -key server.key -out server.csr -config openssl.cnf
           
  • 用戶端生成key檔案,指令成功執行之後,會在Bin目錄下面生成client.key檔案。
openssl genrsa -des3 -out client.key 1024 
           
  • 生成用戶端的csr檔案,指令成功執行之後,會在目錄Bin下面生成client.csr檔案。
openssl req -new -key client.key -out client.csr -config openssl.cnf
           
  • 生成自己的CA,指令成功執行之後,會在Bin目錄下生成ca.key和ca.crt證書文。
openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf
           
  • 用生成的ca給伺服器的csr檔案簽名,生成伺服器端的證書,執行成功後會生成證書檔案server.crt。
Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
           
  • 用生成的ca給用戶端的csr檔案簽名,生成用戶端的證書,執行成功後會生成證書檔案client.crt。
Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
           

對于上面的證書生成過程中,在本次的安全通信系統中所需要使用的隻有五個檔案,分别是ca.crt,client.crt,client.key,server.crt和server.key。使用的時候用戶端需要ca.crt,client.crt,client.key這三個檔案,伺服器端需要ca.crt,server.crt,server.key這三個檔案。

64位win10系統+VS2010下 OpenSSL的安裝編譯、證書生成

在實際程式裡面,如果程式是控制台程式,那麼證書檢查的時候由于證書密碼可以輸入,是以證書可是使用;但是,如果使用的窗體程式,那麼檢查設定證書的時候由于不能輸入密碼,是以導緻證書檢查設定會失敗,此時如果想要使用證書,那麼就需要去掉key檔案的密碼,如此才能在窗體程式中使用證書。去掉key檔案的指令為:

openssl rsa -in server.key -out server.key

主要參考文章

  • https://blog.csdn.net/jiejiaozhufu/article/details/8302169
  • https://bbs.csdn.net/topics/392193545?page=1

繼續閱讀