㈠ 如何使用openssl 讀取 x509證
用php的openssl_x509_parse函數解析用戶證書user.cer和根證書server.cer ,在比較用戶證書與根證書的頒發機構等信息,如果是相同的則說明用戶證書是根證書頒發,即為合法證書,反之則不合法生成證書成功,但打開myCer.crt證書讀取時,執行到d2i_X509(&x,(const unsigned char)&buf,len) 時,返回空。不加下面這幾行,就提示uplink錯誤,加了以後x值為0:extern "C"{#undef APPMACROS_ONLY#include
㈡ 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 集成到項目里了~
㈢ 用openssl命令查看ssl證書信息出錯,原因
網上的命令不用於windows伺服器,還有證書信息在證書本身打開就可以看到,詳情加密演算法,協議版本可以搜索:SSL工具。
㈣ 怎樣查看SSL證書的有效期自動續期是否生效
方法一:直接瀏覽器上查看
1、使用瀏覽器訪問你的站點域名,然後單擊地址欄上內面的鎖圖標進行查容看
上面就是如何查看SSL證書是否過期幾種方法的介紹,一般來說最常用的方法就是直接在瀏覽器上進行查看了,方便快捷。
㈤ openssl訪問https,怎麼獲取證書
1、獲取SSL證書,准備域名。
2、淘寶:Gworg獲取HTTPS證書。
3、拿到證書後,根據伺服器環境安裝。
4、APACHE安裝SSL證書:網頁鏈接
5、Nginx安裝SSL證書:網頁鏈接
6、如果看不到安裝教程,直接叫Gworg代理安裝。
㈥ 怎樣查看SSL證書的有效期
方法一:直接瀏覽器上查看
1、使用瀏覽器訪問你的站點域名,然後單擊地址欄上面的鎖圖標進行查看
上面就是如何查看SSL證書是否過期幾種方法的介紹,一般來說最常用的方法就是直接在瀏覽器上進行查看了,方便快捷。
㈦ 如何使用openssl命令行查看配置支持的協議
用途:
s_client為一個SSL/TLS客戶端程序,與s_server對應,它不僅能與s_server進行通信,也能與任何使用ssl協議的其他服務程序進行通信。
用法:
[cpp] view plain
openssl s_client [-host host] [-port port] [-connect host:port] [-verify depth] [-cert filename]
[-certform DER|PEM] [-key filename] [-keyform DER|PEM] [-pass arg] [-CApath directory] [-CAfile filename]
[-reconnect][-pause] [-showcerts] [-debug] [-msg] [-state] [-nbio_test] [-nbio][-crlf] [-ign_eof] [-no_ign_eof]
[-quiet] [-ssl2] [-ssl3] [-tls1_1] [-tls1_2] [-tls1] [-dtls1] [-no_ssl2][-no_ssl3] [-no_tls1] [-no_tls1_1]
[-no_tls1_2] [-bugs] [-cipher cipherlist] [-starttls protocol] [-engine id] [-tlsextdebug] [-no_ticket]
[-sess_out filename] [-sess_in filename] [-rand file(s)]
選項說明:
-host host:設置服務地址。
-port port:設置服務埠,默認為4433。
-connect host:port:設置伺服器地址和埠號。如果沒有設置,則默認為本地主機以及埠號4433。
-verify depth:設置證書的驗證深度。記得CA也是分層次的吧?如果對方的證書的簽名CA不是Root CA,那麼你可以再去驗證給該CA的證書簽名的CA,一直到Root CA. 目前的驗證操作即使這條CA鏈上的某一個證書驗證有問題也不會影響對更深層的CA的身份的驗證。所以整個CA鏈上的問題都可以檢查出來。當然CA的驗證出問題並不會直接造成連接馬上斷開,好的應用程序可以讓你根據驗證結果決定下一步怎麼走。
-cert filename:使用的證書文件。如果server不要求要證書,這個可以省略。
-certform DER|PEM:證書的格式,一般為DER和PEM。默認為PEM格式。
-key filename:使用的證書私鑰文件。
-keyform DER|PEM:證書私鑰文件的格式,一般為DER和PEM。默認為PEM格式。
-pass arg:私鑰保護口令來源,比如:-pass file:pwd.txt,將私鑰保護口令存放在一個文件中,通過此選項來指定,不需要用戶來輸入口令。
-CApath directory:設置信任CA文件所在路徑,此路徑中的ca文件名採用特殊的形式:xxx.0,其中xxx為CA證書持有者的哈希值,它通過x509 -hash命令獲得。
-CAfile filename:某文件,裡面是所有你信任的CA的證書的內容。當你要建立client的證書鏈的時候也需要用到這個文件。
-reconnect:使用同樣的session-id連接同一個server五次,用來測試server的session緩沖功能是否有問題。
-pause:每當讀寫數據時,sleep 1秒。
-showcerts:顯示整條server的證書的CA的證書鏈。否則只顯示server的證書。
-debug:列印所有的調試信息。
-msg:用16進制顯示所有的協議數據。
-state:列印SSL session的狀態, ssl也是一個協議,當然有狀態。
-nbio_test:檢查非阻塞socket的I/O運行情況。
-nbio:使用非阻塞socket。
-crlf:把在終端輸入的換行回車轉化成/r/n送出去。
-ign_eof:當輸入文件到達文件尾的時候並不斷開連接。
-no_ign_eof:當輸入文件到達文件尾的時候斷開連接。
-quiet:不列印出session和證書的信息。同時會打開-ign_eof這個選項。
-ssl2、-ssl3、-tls1_1、-tls1_2、-tls1、-dtls1、-no_ssl2、-no_ssl3、-no_tls1、-no_tls1_1、-no_tls1_2:使用的協議狀態值。
-bugs:兼容老版本服務端的中的bug。
-cipher cipherlist:由我們自己來決定選用什麼加密演算法,盡管是由server來決定使用什麼演算法列表,但它一般都會採用我們送過去的cipher列表裡的第一個cipher。
-starttls protocol:protocol可以為smtp或pop3,用於郵件安全傳輸。
-engine id:硬體引擎。
-tlsextdebug:列印TLS協議中伺服器端接收到的額外信息值。
-no_ticket:不支持RFC4507bis會話類型。
-sess_out filename:輸出SSL會話信息值到filename中。
-sess_in filename:從filename中獲取SSL Session值。
-rand file(s):指定隨機數種子文件,多個文件間用分隔符分開,windows用「;」,OpenVMS用「,「,其他系統用「:」。
連接選項:
如果一個確認的連接到SSL伺服器,並顯示了從伺服器端接收到了的數據,任何操作都被發送到伺服器。當交互(這意味著沒有給出B<-quiet> 、B<-ign_eof>這兩個選項)的時候,如果命令行B<R>,被設置則session有可能會被重啟。如果設置的是命令行B<Q>或到達了文件的結尾,連接將會被斷開。
注意:
S_client可用於調試SSL伺服器端。為了連接一個SSL HTTP伺服器,命令如下:
openssl s_client -connect servername:443
一旦和某個SSL server建立連接之後,所有從server得到的數據都會被列印出來,所有你在終端上輸入的東西也會被送給server. 這是人機互動式的。這時候不能設置-quiet和 -ign_eof這倆個選項。如果輸入的某行開頭字母是R,那麼在這里session會重啟, 如果輸入的某行開頭是Q,那麼連接會被斷開。你完成整個輸入之後連接也會被斷開。
如果連接成功,你可以用HTTP的指令,比如"GET /"什麼的去獲得網頁了。
如果握手失敗,原因可能有以下幾種:
1. server需要驗證你的證書,但你沒有證書。
2. 如果肯定不是原因1,那麼就慢慢一個一個set以下幾個選項:-bugs, -ssl2, -ssl3, -tls1,-no_ssl2,-no_ssl3, -no_dtls。
3. 這可能是因為對方的server處理SSL有bug。
有的時候,client會報錯:沒有證書可以使用,或者供選擇的證書列表是空的。這一般是因為Server沒有把給你簽名的CA的名字列進它自己認為可以信任的CA列表,你可以用檢查一下server的信任CA列表。有的http server只在 client給出了一個URL之後才驗證client的證書,這中情況下要設置 -prexit這個選項,並且送給server一個頁面請求。
即使使用-cert指明使用的證書,如果server不要求驗證client的證書,那麼該證書也不會被驗證。所以不要以為在命令行里加了-cert 的參數又連接成功就代表你的證書沒有問題。
如果驗證server的證書有問題,就可以設置-showcerts來看看server的證書的CA鏈了。
自從SSLv23客戶端hello不能夠包含壓縮方法或擴展僅僅會被支持。
BUGs:
因為該項目有很多選項,好多用的是老的技術,c代碼的s_client很難去讀取為什麼會被關閉。一個典型的SSL客戶端項目將會更加簡單的。
如果伺服器驗證失敗,B<-verify>將會退出。
B<-prexit>選項是一個很小的空間。當一個session重啟後,我們必須報告。
㈧ 如何查看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根證書,會提示下面的:
點「是」繼續就可以了。然後還會彈出選擇客戶端數字證書的提示框。