win32編譯openssl並生成C S模式的證書

2021-06-02 20:51:04 字數 1886 閱讀 8691

1.      編譯openssl

1.1    安裝perl環境支援,這裡安裝的是activeperl-5.6.1.629-mswin32-x86-multi-thread[可能需要手動配置環境變數 如d:/perl/bin]

1.2    開啟控制台程式,在openssl解壓後的目錄下執行perl configure vc-win32命令,注意,一定要在這個目錄下執行該命令,否則找不到configure檔案,當然,你也可以指定完整的configure檔案路徑。順利通過。

1.3    根據openssl的幫助說明,在解壓目錄下執行ms\do_masm(和ms_\do_ms)命令,成功通過。[這兩個步驟不能顛倒,否則會報錯]

1.4    配置vc環境變數,我在相同的控制台程式下轉到vc所在目錄下的vc98\bin目錄,執行vcvars32批處理命令,設定vc的環境變數,然後再轉到openssl解壓包的根目錄下。

1.5    在openssl解壓目錄下執行nmake -f ms\ntdll.mak,如果沒有錯誤,就完成編譯了。輸出的檔案在out32dll裡面,包括應用程式的可執行檔案、兩個lib檔案和兩個dll檔案。

2.      利用openssl生成c/s模式的證書

c/s模式證書的生成步驟:

一、伺服器端

1.生成伺服器端的私鑰:

openssl genrsa -des3 -outserver.key 1024

2.生成伺服器端證書簽名請求檔案 csr

[這裡輸入的密碼是openssl]

【提示】openssl rsa-in server.key -out server.key

以後可以通過此命令去除key檔案的密碼因為當https啟動apache daemon時,總提示輸入密碼,很煩人,影響開機自動啟動服務

二、客戶端

1.客戶端也同樣生成key和csr檔案

openssl genrsa -des3 -outclient.key 1024

openssl req -new -keyclient.key -out client.csr

三、生成ca證書檔案:

1.首先生成ca的key檔案:

openssl genrsa -des3 -out ca.key 1024

2.生成ca自簽名檔案:

openssl req -new -x509 -keyca.key -out ca.crt [-days 365]

四、利用ca證書進行簽名:

用生成的ca證書為server.csr,client.csr 檔案簽名,利用openssl 中附帶的ca.pl檔案

1.ca.pl -newca 在提示輸入已有的證書檔案時,輸入上面已生成的ca.crt證書檔案; 

2. 生成服務端證書檔案

這裡提示在./democa/newcerts目錄下找不到任何crt檔案,我們把建立乙個democa/newcerts目錄並把ca.crt複製進來。

再來一次,這時可以看到簽名已經成功了:

3. 生成客戶端證書檔案

openssl ca -in client.csr-out client.crt -cert ca.crt -keyfile ca.key [-config openssl.cnf]

但是客戶端的簽名居然沒有生成成功:

解決方法:刪除上次生成的 democa目錄下的index.txt檔案,新建乙個index.txt.

至此,所有的證書檔案都生成成功了。

easylzma在Win32下編譯

2.解壓c盤或d盤根目錄後 不要解在桌面上 在解開的檔案及目錄中,建乙個build目錄,再到http www.cmake.org 下乙個win32的cmake,並安裝好,安裝過程中,有個提示,一定選擇將cmake工作檔案新增到path中 3.進入到剛剛建立的build目錄,在該目錄下開乙個cmd視窗...

折騰llvm的win32編譯

lnk1107 檔案無效或損壞 無法在 0x2d8 處讀取.這是由於,在c 中,lib是鏈結時用,而dll是在編譯時用.所以編譯時不用dll,而應該用lib檔案.llvm說可以在x64機上編譯x86位,我試了幾下都不行,始終就是x64位.還是在老機子上跑.把並行設定改小點.又可以寫一篇文章了.寫我如...

Win32程式設計

win32 malloc函式的底層實現是win32api utf 16編碼以16位無符號整數為單位,注意是16位為乙個單位,不是乙個字元就只有16位,這個要看字元的unicode編碼處於什麼範圍而定,有可能是2個位元組,也可能是4個位元組現在機器上的unicode編碼一般就是指utf 16 以兩個位...