㈠ 如何使用OpenSSL創建證書
為一個基於密碼學的安全開發包,OpenSSL提供的功能相當強大和全面,囊括了主要的密碼演算法、常用的密鑰和證書封裝管理功能以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用。
1.對稱加密演算法
OpenSSL一共提供了8種對稱加密演算法,其中7種是分組加密演算法,僅有的一種流加密演算法是RC4。這7種分組加密演算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持電子密碼本模式(ECB)、加密分組鏈接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128位,其它演算法使用的則是64位。事實上,DES演算法裡面不僅僅是常用的DES演算法,還支持三個密鑰和兩個密鑰3DES演算法。
2.非對稱加密演算法
OpenSSL一共實現了4種非對稱加密演算法,包括DH演算法、RSA演算法、DSA演算法和橢圓曲線演算法(EC)。DH演算法一般用戶密鑰交換。RSA演算法既可以用於密鑰交換,也可以用於數字簽名,當然,如果你能夠忍受其緩慢的速度,那麼也可以用於數據加密。DSA演算法則一般只用於數字簽名。
3.信息摘要演算法
OpenSSL實現了5種信息摘要演算法,分別是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA演算法事實上包括了SHA和SHA1兩種信息摘要演算法,此外,OpenSSL還實現了DSS標准中規定的兩種信息摘要演算法DSS和DSS1。
4.密鑰和證書管理
密鑰和證書管理是PKI的一個重要組成部分,OpenSSL為之提供了豐富的功能,支持多種標准。
首先,OpenSSL實現了ASN.1的證書和密鑰相關標准,提供了對證書、公鑰、私鑰、證書請求以及CRL等數據對象的DER、PEM和BASE64的編解碼功能。OpenSSL提供了產生各種公開密鑰對和對稱密鑰的方法、函數和應用程序,同時提供了對公鑰和私鑰的DER編解碼功能。並實現了私鑰的PKCS#12和PKCS#8的編解碼功能。OpenSSL在標准中提供了對私鑰的加密保護功能,使得密鑰可以安全地進行存儲和分發。
在此基礎上,OpenSSL實現了對證書的X.509標准編解碼、PKCS#12格式的編解碼以及PKCS#7的編解碼功能。並提供了一種文本資料庫,支持證書的管理功能,包括證書密鑰產生、請求產生、證書簽發、吊銷和驗證等功能。
事實上,OpenSSL提供的CA應用程序就是一個小型的證書管理中心(CA),實現了證書簽發的整個流程和證書管理的大部分機制。
5.SSL和TLS協議
OpenSSL實現了SSL協議的SSLv2和SSLv3,支持了其中絕大部分演算法協議。OpenSSL也實現了TLSv1.0,TLS是SSLv3的標准化版,雖然區別不大,但畢竟有很多細節不盡相同。
雖然已經有眾多的軟體實現了OpenSSL的功能,但是OpenSSL裡面實現的SSL協議能夠讓我們對SSL協議有一個更加清楚的認識,因為至少存在兩點:一是OpenSSL實現的SSL協議是開放源代碼的,我們可以追究SSL協議實現的每一個細節;二是OpenSSL實現的SSL協議是純粹的SSL協議,沒有跟其它協議(如HTTP)協議結合在一起,澄清了SSL協議的本來面目。
6.應用程序
OpenSSL的應用程序已經成為了OpenSSL重要的一個組成部分,其重要性恐怕是OpenSSL的開發者開始沒有想到的。現在OpenSSL的應用中,很多都是基於OpenSSL的應用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的應用程序實現的。OpenSSL的應用程序是基於OpenSSL的密碼演算法庫和SSL協議庫寫成的,所以也是一些非常好的OpenSSL的API使用範例,讀懂所有這些範例,你對OpenSSL的API使用了解就比較全面了,當然,這也是一項鍛煉你的意志力的工作。
OpenSSL的應用程序提供了相對全面的功能,在相當多的人看來,OpenSSL已經為自己做好了一切,不需要再做更多的開發工作了,所以,他們也把這些應用程序成為OpenSSL的指令。OpenSSL的應用程序主要包括密鑰生成、證書管理、格式轉換、數據加密和簽名、SSL測試以及其它輔助配置功能。
7.Engine機制 Engine機制的出現是在OpenSSL的0.9.6版的事情,開始的時候是將普通版本跟支持Engine的版本分開的,到了OpenSSL的0.9.7版,Engine機制集成到了OpenSSL的內核中,成為了OpenSSL不可缺少的一部分。 Engine機制目的是為了使OpenSSL能夠透明地使用第三方提供的軟體加密庫或者硬體加密設備進行加密。OpenSSL的Engine機製成功地達到了這個目的,這使得OpenSSL已經不僅僅使一個加密庫,而是提供了一個通用地加密介面,能夠與絕大部分加密庫或者加密設備協調工作。當然,要使特定加密庫或加密設備更OpenSSL協調工作,需要寫少量的介面代碼,但是這樣的工作量並不大,雖然還是需要一點密碼學的知識。Engine機制的功能跟Windows提供的CSP功能目標是基本相同的。目前,OpenSSL的0.9.7版本支持的內嵌第三方加密設備有8種,包括:CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare以及IBM 4758 CCA的硬體加密設備。現在還出現了支持PKCS#11介面的Engine介面,支持微軟CryptoAPI的介面也有人進行開發。當然,所有上述Engine介面支持不一定很全面,比如,可能支持其中一兩種公開密鑰演算法。
8.輔助功能
BIO機制是OpenSSL提供的一種高層IO介面,該介面封裝了幾乎所有類型的IO介面,如內存訪問、文件訪問以及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供API的復雜性也降低了很多。
OpenSSL對於隨機數的生成和管理也提供了一整套的解決方法和支持API函數。隨機數的好壞是決定一個密鑰是否安全的重要前提。
OpenSSL還提供了其它的一些輔助功能,如從口令生成密鑰的API,證書簽發和管理中的配置文件機制等等。如果你有足夠的耐心,將會在深入使用OpenSSL的過程慢慢發現很多這樣的小功能,讓你不斷有新的驚喜。
㈡ 如何使用windows證書庫中載入證書 給openssl 使用.求指點
需要CA給Web伺服器辦法一個伺服器證書,Web伺服器配置一下SSL認證模式,選擇雙認證,客戶的使用該CA辦法的簽名認證證書,使用HTTPS登錄即可。 如果您對我的回答有不滿意的地方,還請您繼續追問; 答題不易,互相理解,互相幫助!
㈢ Linux CentOS 怎麼使用openssl 向windows server CA證書伺服器申請web證書。求詳細過程。
1、.key和.cer可以合並成pfx或p12文件
2、例如
openssl pkcs12 -export -clcerts -in a.cer -inkey a.key -out a.p12
㈣ win+apache怎麼安裝ssl證書
Linux+Apache下安裝SSL證書的步驟如下: Apache安裝景安SSL證書需要三個配置文件 1 1_root_bundle是您的域名,2_ domainname.key為私鑰。(文件後綴名crt和cer的性質是一樣的) END 安裝證書 下載並解壓openssl。(1)確認文件的存放目錄,例當前目錄為:/usr/local。 解壓openssl。如:tar zxvf openssl-0.9.8k.tar.gz 配置openssl。(1)進入openssl目錄。如:cd openssl-0.9.8k。 2)配置openssl。如:./config shared zlib make make test make install mv /usr/bin/openssl /usr/bin/openssl.save mv /usr/include/openssl /usr/include/openssl.save mv /usr/lib/libssl.so /libssl.so.save ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl ln -s /usr/local/ssl/include/openssl /usr/include/openssl ln -sv /usr/local/ssl/lib/libssl.so.0.9.8 /usr/lib/libssl.so 安裝apache1.解壓文件:tar zxvf httpd-2.2.26.tar.gz2.進入目錄:cd httpd-2.2.263.配置安裝(/usr/local/ssl是openssl的安裝路徑):./configure --prefix=/usr/local/apache --enable-so --enable-ssl --with-ssl=/usr/local/ssl --enable-mods-shared=all 4.安裝:make && make install5.修改apache下的httpd.conf文件。(1)打開apache安裝目錄下conf目錄中的httpd.conf文件,找到 #LoadMole ssl_mole moles/mod_ssl.so #Include conf/extra/httpd-ssl.conf (2)刪除行首的配置語句注釋符號「#」,保存退出。6.修改apache下httpd-ssl文件。 如果本地測試,請做本地解析訪問:打開 系統盤:\Windows\System32\Drivers\etc\hosts文件,用文本編輯器修改,把證書綁定的域名解析到本地ip。 訪問https://+證書綁定的域名,測試效果如下: END 注意事項 部署完畢後若網站無法通過https正常訪問,可確認伺服器443埠是否開啟或被網站衛士等加速工具攔截。 (1)開啟方法:防火牆設置-例外埠-添加443埠(TCP)。 (2)若被安全或加速工具攔截,可以在攔截記錄中將443添加至信任列表。 重啟後,重新通過https訪問。如果還不行可咨詢服務商
㈤ linux下使用openssl檢測PE文件數字簽名的證書是否有效
第一個坑: 有效期
windows在判斷證書是否有效時不檢測證書的有效期, 即使該證書超過有效期好幾年了, 只要沒有被吊銷, 微軟仍然認為它是有效的. 但在 openssl 提供的 X509_verify_cert 函數會驗證證書的有效期, 因此需要注釋掉驗證有效期的那部分代碼並重新編譯 openssl...
OK, 從 openssl 官網 上下載最新的版本, 好吧, 現在還是剛剛修復 Heartbleed 漏洞的 1.0.1g 版本...
下載, 解壓, 看下 INSTALL 文檔, 先試試可以編譯不:
./config
make
運氣不錯, 不用安裝什麼依賴直接編譯成功. 將代碼根目錄產生的 libcrypto.a 添加到項目中測試下, OK, 可以使用, 下面開始折騰了~
在 crypto/x509/x509_vfy.c 的 153 行找到 X509_verify_cert 函數(在線查看), 局部變數 ok 緩存每一步驗證是否通過, 它依次調用了:
check_issued
check_chain_extensions
check_name_constraints
check_trust
check_revocation
internal_verify
check_policy
其中 internal_verify (在線查看)驗證了證書的有效期, 進入這個函數, 在 1654 行找到這個代碼:
ok = check_cert_time(ctx, xs);
if (!ok)
goto end;
看看 check_cert_time 函數, 確認是檢查 notBefore 和 notAfter, 因此將上面三行代碼注釋掉, 驗證證書時就不會檢測有效期了.
然後就是重新編譯 openssl, 將 libcrypto.a 集成到項目里了~
第二個坑: unhandled critical extension
搜索了下, 在 openssl 官網上找到這個:
-ignore_critical
Normally if an unhandled critical extension is present which is not supported by OpenSSL the certificate is rejected (as required by RFC5280). If this option is set critical extensions are ignored.
原來是當openssl遇到證書中有它不支持的 未處理的關鍵擴展(unhandled critical extension ?) 時, 它會拒絕載入該證書.
再搜索下 -ignore_critical, 在 verify.c 中找到如下代碼片段:
else if (strcmp(*argv,"-ignore_critical") == 0)
vflags |= X509_V_FLAG_IGNORE_CRITICAL;
然後再使用 X509_STORE_set_flags 函數設置標志位:
X509_STORE *ctx;
...
X509_STORE_set_flags(ctx, vflags);
即可.
第三個坑: certificate signature failure
這個坑填不上了, openssl 說:
7 X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure
the signature of the certificate is invalid.
在windows下導出證書文件, 直接用 openssl 驗證, 在載入證書就會出錯, PEM_read_bio_X509 返回為空....
第四個坑: A certificate was explicitly revoked by its issuer.
A certificate was explicitly revoked by its issuer. 是 Sysinternals 提供的工具sigcheck.exe 的檢測結果, 把文件拎出來一看, 證書真的被撤銷了...
OK, 只好根據證書上的 CRL Distribution Point(CRL 分發點) 提供的 URL 下載 撤銷證書列表 文件, 然後在調用 X509_verify_cert 驗證證書鏈之前, 設置填充被撤銷的證書列表:
X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); // 讀取被撤銷的證書列表
STACK_OF(X509_CRL) *sk_X509_CRL_new_null();
#define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val)); // sk_X509_CRL_push(STACK_OF(X509_CRL) *crls, X509_CRL *crl);
void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); // 設置被撤銷的證書列表
同時, 也要設置檢查被撤銷證書列表的標志位 X509_V_FLAG_CRL_CHECK, 然後再調用X509_verify_cert 驗證證書鏈即可.
填了第四個坑後又引起了第五個坑(如何獲取撤銷證書列表)和第六個坑(設置檢測撤銷證書列表的標識位後, 如果該證書沒有撤銷證書列表則直接報錯)...
第五個坑: 獲取撤銷證書列表文件
證書上的 CRL Distribution Point(CRL 分發點) 屬於擴展屬性, 在 PKCS #7: Cryptographic Message Syntax V1.5 上沒有相關介紹.
在 StackOverflow 上找到這個問答 Openssl - How to check if a certificate is revoked or not, 其中第二個回答說 CRL 是在 RFC 5280 中定義的, 除了證書中附帶被撤銷的證書列表以外還有使用 OCSP 協議的, 即使證書撤銷列表也分為使用 URL分發點和 LDAP DNs(???)提供的, 目前先考慮使用 URL 作為 CRL分發點 的情況吧.
然而 openssl 沒有提供直接獲取 CRL 分發點 URL 的API, 那個回答說 Apache 的 mod_ssl 模塊有本地 CRL 和 OCSP 檢測的實現代碼, 但沒有說明哪裡有檢測使用 URL 作為 CRL分發點 的實現方法.
然後又在 frank4dd.com上找到這個代碼 certextensions.c, 他給出了一個如何使用 openssl 從 X.509v3 版本的證書文件中提取擴展內容的示常式序, 太感謝 Frank4DD 這位仁兄了~~~
到這里後, 可以直接使用他的示常式序, 根據關鍵字 Full Name 和 URI 定位 CRL 分發點 的 URL, 也可以看看 openssl 是如何提取這個 URL 的, 然後自己實現一個介面.
如果自作孽使用第二種方法的話, 就編譯個 debug 版的 openssl 庫, 然後調試跟進X509V3_EXT_print 函數, 一步一步的向下走, 直到走到 GENERAL_NAME_print 函數, 這里就是終點了...然後就知道了 CRL 分發點 的 URL 的編號為 6, 也就是 GEN_URI, 直接取結果吧.
第六個坑: CRL有效期
在windows環境下每次查看PE文件的數字簽名時, windows 都會從 CRL分發點 下載吊銷證書列表做驗證,一般來說, 每個 CRL的有效期是非常短的,大概只有5~20 天的有效期吧, 然而我們不可能像 windows 一樣每次查看數字簽名時就從CRL分發點下載最新的吊銷列表.
另外, windows 遇到過期的 CRL 時不會產生證書鏈無效的結果, 但 openssl 在遇到過期的 CRL 時就會導致證書鏈驗證失敗, 因此在載入和驗證 CRL 時, 要忽略 CRL 的有效期.
分析 openssl 源代碼, X509_verify_cert 調用 check_revocation , 之後調用 check_cert , 然後再調用 check_crl , 在這個函數里有檢測 CRL 有效期的代碼:
if (!(ctx->current_crl_score & CRL_SCORE_TIME))
{
ok = check_crl_time(ctx, crl, 1);
if (!ok)
goto err;
}
將其注釋掉即可忽略檢測 CRL 有效期.
第七個坑: CRL 列表為空導致 openssl 認為沒有載入 CRL
9 初始化順序
10 證書名: key_id
㈥ 我用linux的openssl自建CA並簽發證書,自建的CA在windows下顯示不能頒發證書!!如圖:
證書導入必須出現導入證書機構代碼、才能正常使用
㈦ 如何查看windows伺服器端和客戶端openssl版本
一、准備工作
1.windows2003添加組件
添加IIS:勾選「應用程序伺服器」,然後雙擊進入下圖,勾選「IIS」和「ASP.NET」
添加證書系統:勾選「證書服務」
添加組件的時候要求填寫的就按照操作填上就行了,然後下一步,直到完成。
2.把openssl(執行版,有的叫編譯後版)解壓到d:下,當然哪個盤都可以。
二、獲取IIS證書請求
架設好IIS網站後,在【目錄安全性】選項卡中點擊【伺服器證書】按鈕,【下一步】,【新建證書】,【現在准備證書請求--下一步】,輸入【名稱】,輸入【單位】和【部門】,輸入【公用名稱】,選擇【國家】並輸入【省】和【市縣】並【下一步】,【下一步】,【下一步】,【完成】,IIS的證書請求已經獲取,就是C:\certreq.txt。這里請牢記輸入的信息。
三、開始操作openssl
(cmd –> d:\openssl-0.9.7\out32dll
下執行下面的操作,注意openssl.cnf文件,後面命令都是用它編譯的)
1.生成自簽名根證書
openssl
req -x509 -newkey rsa:1024 -keyout cakey.pem -out cacert.pem -days 3650 -config
d:\openssl-0.9.7\apps\openssl.cnf
PEM pass phrase:根證書密碼,當然很重要!
Country
Name: CN //兩個字母的國家代號
State or Province Name: guang dong //省份名稱
Locality
Name: guang zhou //城市名稱
Organization Name: sunrising //公司名稱
Organizational Unit Name: home //部門名稱
Common Name: besunny
//你的姓名(要是生成伺服器端的證書一定要輸入域名或者ip地址)
Email Address: Email地址
2.把cakey.pem 拷貝到\demoCA\private,
把cacert.pem拷貝到out32dll\demoCA
cakey.pem
demoCA\private
cacert.pem
demoCA
提醒:這時候,已經有cakey.pem:ca的私鑰文件,cacert.pem:ca的自簽名根證書,certreq.txt:IIS的證書請求文件,三個文件。
3.用CA證書cacert.pem為IIS請求certreq.txt簽發證書server.pem
openssl ca -in certreq.txt -out server.pem -config
d:\openssl-0.9.7\apps\openssl.cnf
4.把server.pem轉換成x509格式
openssl
x509 -in server.pem -out
server.cer
提醒:這時候,你又得到了兩個文件,一個是server.pem,一個是server.cer。現在把bin下的server.cer復制到c:下。
5.將生成的證書server.cer導入到IIS
打開IIS,在【默認網站】上單擊右鍵【屬性】,在【目錄安全性】選項卡中點擊【伺服器證書】按鈕,【下一步】,選擇【處理掛起的請求並安裝證書】並【下一步】,正常情況下,您已經看到了文本框中就是c:\server.cer,如果不是,自己點【瀏覽】按鈕去找並【下一步】,【下一步】,【完成】。回到【目錄安全性】選項卡在【安全通信】欄目中單擊【編輯】按鈕,勾上【要求安全通道(SSL)】,勾上【要求128位加密】,選擇【要求客戶端證書】,點擊【確定】按鈕。
6.生成客戶端證書
openssl
req -newkey rsa:1024 -keyout clikey.pem -out clireq.pem -days 365 -config
d:\openssl-0.9.7\apps\openssl.cnf
證書信息自己填寫,有些內容要與根證書一致。
7.CA簽發客戶端證書
openssl ca -in
clireq.pem -out client.crt -config d:\openssl-0.9.7\apps\openssl.cnf
8.將客戶端證書轉換為pk12格式
openssl pkcs12 -export -clcerts -in client.crt -inkey clikey.pem -out
client.p12 -config d:\openssl-0.9.7\apps\openssl.cnf
9.安裝信任的根證書
把cacert.pem改名為cacert.cer,雙擊cacert.cer文件,打開證書信息窗口,單擊【安裝證書】按鈕,【下一步】。
提醒,下面是最關鍵的:
選擇【將所有的證書放入下列存儲區】,點擊【瀏覽】按鈕
[url=file:///C:/Documents][/url]
選擇【受信任的根證書頒發機構】,勾選【物理存儲區】,選擇【受信任的根證書頒發機構】,點【本地計算機】,並點擊【確定】,【下一步】,【完成】,【是】,根證書安裝完畢!勾選【物理存儲區」,選擇「受信任的根證書頒發機構」,點「本地計算機」,然後點「確定」。
[url=file:///C:/Documents][/url]
「clent.crt」的安裝也是上面相同的步驟。
10.安裝客戶端證書
找到client.p12文件拷貝到本地計算機,然後雙擊,【下一步】,【下一步】,輸入客戶端證書的密碼並【下一步】,【下一步】,【完成】,【確定】。到此,客戶端的證書也已經安完畢。
提醒:
最好把cacert.cer文件作為受新人的根證書安裝到本地。我架設的是提供給內網使用的,所以Common
Name直接是內網IP,當然可以是域名,如果導入cacert.cer後,本地計算機就識別https://你的地址是可信任網站,直接由伺服器就識別客戶端的證書,然後就可以登陸了。
如果沒有導入cacert.cer根證書,會提示下面的:
點「是」繼續就可以了。然後還會彈出選擇客戶端數字證書的提示框。
㈧ 怎麼在windows上openssl頒發代碼簽名證書
用php的openssl_x509_parse函數解析用戶證書user.cer和根證書server.cer ,在比較用戶證書與根證書的頒發機構等信息,如果是相同的則說明用戶證書是根證書頒發,即為合法證書,反之則不合法
㈨ 用openssl命令查看ssl證書信息出錯,原因
網上的命令不用於windows伺服器,還有證書信息在證書本身打開就可以看到,詳情加密演算法,協議版本可以搜索:SSL工具。