導航:首頁 > 證書轉讓 > openssl簽名證書

openssl簽名證書

發布時間:2021-09-14 12:31:38

Ⅰ 用openssl驗證證書和私鑰是否有效

證書與私鑰是否有效驗證,可以在線驗證:網頁鏈接

SSL證書簽發與續費辦理:網頁鏈接

Ⅱ 如何使用OpenSSL創建證書

Step 1. Create key (password protected)

openssl genrsa -out prvtkey.pem 1024/2038 (with out password protected)

openssl genrsa -des3 -out prvtkey.pem 1024/2048 (password protected)

這個命令會生成一個1024/2048位的密鑰。
Step 2. Create certification request

openssl req -new -key prvtkey.pem -out cert.csr

openssl req -new -nodes -key prvtkey.pem -out cert.csr

這個命令將會生成一個證書請求,當然,用到了前面生成的密鑰prvtkey.pem文件
這里將生成一個新的文件cert.csr,即一個證書請求文件,你可以拿著這個文件去數字證書頒發機構(即CA)申請一個數字證書。CA會給你一個新的文件cacert.pem,那才是你的數字證書。

Step 3: Send certificate request to Certification Authority (CA)

如果是自己做測試,那麼證書的申請機構和頒發機構都是自己。就可以用下面這個命令來生成證書:
openssl req -new -x509 -key prvtkey.pem -out cacert.pem -days 1095
這個命令將用上面生成的密鑰privkey.pem生成一個數字證書cacert.pem

cacert.pem 生成過程見「OpenSSL建立自己的CA」

有了privkey.pem和cacert.pem文件後就可以在自己的程序中使用了,比如做一個加密通訊的伺服器

-------------
OpenSSL建立自己的CA

(1) 環境准備

首先,需要准備一個目錄放置CA文件,包括頒發的證書和CRL(Certificate Revoke List)。
這里我們選擇目錄 /var/MyCA。

然後我們在/var/MyCA下建立兩個目錄,certs用來保存我們的CA頒發的所有的證書的副本;private用來保存CA證書的私鑰匙。

除了生成鑰匙,在我們的CA體系中還需要創建三個文件。第一個文件用來跟蹤最後一次頒發的證書的序列號,我們把它命名為serial,初始化為01。第二個文件是一個排序資料庫,用來跟蹤已經頒發的證書。我們把它命名為index.txt,文件內容為空。

$ mkdir /var/MyCA
$ cd /var/MyCA
$ mkdir certs private
$ chmod g-rwx,o-rwx private
$ echo "01" > serial
$ touch index.txt

第三個文件是OpenSSL的配置文件,創建起來要棘手點。示例如下:

$ touch openssl.cnf

文件內容如下:

[ ca ]
default_ca = myca

[ myca ]
dir = /var/MyCA
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial

default_crl_days= 7
default_days = 365
default_md = md5

policy = myca_policy
x509_extensions = certificate_extensions

[ myca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = supplied
organizationName= supplied
organizationalUnitName = optional

[ certificate_extensions ]
basicConstraints= CA:false

我們需要告訴OpenSSL配置文件的路徑,有兩種方法可以達成目的:通過config命令選項;通過環境變數OPENSSL_CONF。這里我們選擇環境變數的方式。

$ OPENSSL_CONF=/var/MyCA/openssl.cnf"
$ export OPENSSL_CONF

(2) 生成根證書 (Root Certificate)

我們需要一個證書來為自己頒發的證書簽名,這個證書可從其他CA獲取,或者是自簽名的根證書。這里我們生成一個自簽名的根證書。

首先我們需要往配置文件裡面添加一些信息,如下所示,節名和命令行工具的命令req一樣。我們把所有必要的信息都寫進配置,而不是在命令行輸入,這是唯一指定X.509v3擴展的方式,也能讓我們對如何創建根證書有個清晰的把握。

[ req ]
default_bits = 2048
default_keyfile = /var/MyCA/private/cakey.pem
default_md = md5
prompt = no
distinguished_name = root_ca_distinguished_name
x509_extensions = root_ca_extensions
[ root_ca_distinguished_name ]
commonName = My Test CA
stateOrProvinceName = HZ
countryName = CN
emailAddress = [email protected]
organizationName = Root Certification Authority
[ root_ca_extensions ]
basicConstraints = CA:true

萬事俱備,我們可以生成根證書了。注意設置好環境變數OPENSSL_CONF。

$ openssl req -x509 -newkey rsa -out cacert.pem -outform PEM -days 356

註:「-days 356「控制有效期限為365天,默認為30天。

驗證一下我們生成的文件。

$ openssl x509 -in cacert.pem -text -noout

(3) 給客戶頒發證書

在給客戶頒發證書之前,需要客戶提供證書的基本信息。我們另外開啟一個終端窗口,使用默認的OpenSSL配置文件(不要讓之前的OPENSSL_CONF干擾我們,那個配置是專門用來生成根證書的)。

命令和我們生成根證書的類似,都是req,不過需要提供一些額外的信息。如下:

$ openssl req -newkey rsa:1024 -keyout testkey.pem -keyform PEM -out testreq.pem -outform PEM

有兩次提示要口令,第一次的口令用來加密私鑰匙testkey.pem,第二次口令一般被OpenSSL忽略。
結果生成兩個文件:testkey.pem,私鑰匙;testreq.pem,請求信息,其中包括公鑰匙。

我們來看看testreq.pem都有哪些信息?

$ openssl req -in testreq.pem -text -noout

現在,我們可以把testreq.pem提交給我們的CA生成證書了。
為了方便起見,我們假定testreq.pem在//var/MyCA/private/中。

$ openssl ca -in testreq.pem

有三次提示,一次是問你CA的私鑰匙密碼,兩次是確認,輸出的結果就是為客戶頒發的證書。
可以通過batch選項取消命令提示,可通過notext選項取消證書的輸出顯示。
此外,還可以一次給多個客戶頒發證書,方法是用 infiles選項替換in選項,不過這個選項必須放在最後,因為此後的任何字元均被處理為文件名稱列表。

生成的證書放在certs目錄,同時index.txt和serial的內容都發生了改變。

Ⅲ 用openssl生成的ssl證書和付費的有什麼區別

用openssl生成的SSL證書即自簽名證書,存在安全隱患,而且不受瀏覽器信任。最好從正規第三方證書頒發機構去申請,還不用自己弄代碼那麼復雜,GDCA可以申請各類型SSL證書,免費付費的都有,看你需要。

Ⅳ 什麼是自簽名SSL證書

自己生成的SSL證書,不是CA機構頒發的SSL證書,稱之為自簽名證書。

解釋原因:回

  1. 受信任的SSL證書:會答被瀏覽器信任認可,安全加密服務與安全掃描相關CA配套服務。
  2. 自簽署的SSL證書:不會被瀏覽器信任,數據被泄漏級劫持安全漏洞安全風險較高。

自簽名主要風險:

  1. 瀏覽器的地址欄會提示風險不安全網站。

  2. 小程序或APP無法應用與支持。

  3. 無法實現信用與介面交易行為。

  4. 網頁會被劫持,被強制插入廣告或跳轉到其它網頁。

  5. 用戶數據明文傳輸,隱私信息被中間劫持。

  6. 極容易被劫持和釣魚攻擊。

自簽名安全隱患:

  1. 自簽證書最容易受到SSL中間人攻擊

  2. 自簽證書支持不安全的SSL通信重新協商機制

  3. 自簽證書支持非常不安全的SSL V2.0協議

  4. 自簽證書沒有可訪問的吊銷列表

  5. 自簽證書使用不安全的1024位非對稱密鑰對

  6. 自簽證書證書有效期太長

  7. 自簽證書普遍存在嚴重的安全漏洞,極易受到攻擊

解決方法:Gworg申請可信SSL證書。

Ⅳ linux怎麼用openssl生成自簽名證書

這個證書中的簽名與這個私鑰是對應關系,證書中的公鑰和私鑰也是匹配的,可以通過證書中的公鑰對證書進行驗簽

Ⅵ openssl 自簽名證書怎麽配置到windows server 2008 r2 tomcat伺服器上

用php的openssl_x509_parse函數解析用戶證書user.cer和根證書server.cer ,在比較用戶證書與根證書的頒發機構等信息,如果是相同的則說明用戶證書是根證書頒發,即為合法證書,反之則不合法

Ⅶ keytool和openssl的區別

在數字證書使用過程中,會遇到簽發證書問題,一般來說,有3個解決方法:
1.交由受信任的第三方證書頒發機構簽名;
2.自簽名;
3.自製CA證書並用其簽名。
對於上線運營的網站來說,第一個方案是首選,因為只有這樣瀏覽器才不會報警。過去買證書很貴,現在倒是有免費的了,比如IE和Firefox都支持的StartSSL。
不同的證書頒發機構對於證書生成多少都會有自己的要求,所以本文主要討論後兩種方案。
下面用OpenSSL生成CA簽名的證書,用Keytool生成CSR(Certificate Signing Request)。

一、准備
1)在工作目錄下新建目錄 demoCA、demoCA/private、demoCA/newcerts
2) 在demoCA建立一個空文件 index.txt
3) 在demoCA建立一個文本文件 serial, 沒有擴展名,內容是一個合法的16進制數字,例如 0000
4) 配置環境變數PATH,加入%JAVA_HOME%/bin,本文用的JavaSDK1.6

二、生成CA的自簽名證書
openssl req -new -x509 -keyout ca.key -out ca.cer -days 3650 -config openssl.cnf
req命令表示創建證書,new參數表示創建私鑰而不是從已存在的文件中讀取,nodes參數表示不加密私鑰。如果不添加nodes參數,以後每次使用私鑰時都必須輸入密碼(如Apache每次重啟)
openssl.cnf在openssl壓縮包的share目錄下

輸入證書信息時,Country Name填入CN,Common Name輸入單位名稱,即最後顯示的頒發者
三、生成server端證書
這步使用的是JDK的keytool工具
1) 生成KeyPair生成密鑰對
keytool -genkeypair -alias server -validity 365 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -keystore server.keystore
輸入common name時,要和伺服器的域名保持一致。
2) 生成證書簽名請求
keytool -certreq -alias server -sigalg MD5withRSA -file server.csr -keypass 123456 -storepass 123456 -keystore server.keystore

四、使用OpennSSL簽發證書
openssl ca -in server.csr -out server.cer -cert ca.cer -keyfile ca.key -notext -config openssl.cnf
其中-notext表示不要把證書文件的明文內容輸出到文件中去,否則在後面用keytool導入到keystore時會出錯。
在簽名時,如果報「The stateOrProvinceName field needed to be the same in the CA certificate」,是因為在openssl.cfg中的policy_match裡面的前三個都選了match,修改成
stateOrProvinceName = optional
organizationName = optional
就可以了

五、導回簽發後的證書
1) 導入信任的CA根證書到keystore
keytool -importcert -v -trustcacerts -alias ca_root -file ca.cer -storepass 123456 -keystore server.keystore
2) 把CA簽名後的server端證書導入keystore
keytool -importcert -v -alias server -file server.cer -storepass 123456 -keystore server.keystore
3) 查看server端證書
keytool -list -v -keystore server.keystore
可以看到tomcat_server的證書鏈長度是2
報failed to update database
TXT_DB error number 2
錯誤時
產生的原因是:
This thing happens when certificates share common data. You cannot have two certificates that look otherwise the same.

方法一:
修改demoCA下 index.txt.attr,將
unique_subject = yes 改為
unique_subject = no

方法二:
刪除demoCA下的index.txt,並再touch下
rm index.txt
touch index.txt

方法三:
將 common name設置成不同的

單獨生成私鑰
openssl genrsa -des3 -out class1.key

生成請求文件
openssl req -new -days 365 -key class1.key -out class1.csr -config openssl.cnf

如果運行簽發的證書再做為CA,那麼在ca簽名時加上
-extensions v3_ca

Ⅷ openssl證書生成工具如何生成證書鏈

2. 生成Root CA私鑰與證書: .1 先生成RootCA私鑰--》使用私鑰生成CSR--》生成自簽名根證書。用來給二級CA證書簽名。 3. 生成二級CA 私鑰與證書:(假如有兩個二級CA, 分別負責管理伺服器端和客戶端證書) 3.1 先生成ServerCA私鑰--》使用私鑰生成CSR--》使用根證書簽名生成二級證書。用來給伺服器證書簽名。 3.2 先生成ClientCA私鑰--》使用私鑰生成CSR--》使用根證書簽名生成二級證書。用來給客戶端證書簽名。 4. 生成伺服器端與客戶端的私鑰與證書: 4.1 先生成ServerA私鑰--》使用私鑰生成CSR--》使用ServerCA證書簽名生成三級證書。 4.2 先生成ClientA私鑰--》使用私鑰生成CSR--》使用ClientCA證書簽名生成三級證書。 4.3 先生成ClientB私鑰--》使用私鑰生成CSR--》使用ClientCA證書簽名生成三級證書 。。。。可以生成N個客戶端證書證書結構:RootCA||-------ServerCA| || |--------ServerA||-------ClientCA||--------ClientA||--------ClientB||--------...| 5. 導出RootCA的根證書、伺服器端和客戶端的私鑰和證書。 導出時都使用pem格式。 RootCA.pem-------根證書(PEM ) ServerA.pem------伺服器端證書(PEM with Certificate chain) ClientA.pem------客戶端證書(PEM with Certificate chain) ClientB.pem------客戶端證書(PEM with Certificate chain) ServerAKey.pem------伺服器端私鑰(PEM ) ClientAKey.pem------客戶端私鑰(PEM ) ClientBKey.pem------客戶端私鑰(PEM ) 6.下面是最重要的一步:生成需要使用的JKS文件。keytool工具不能導入私鑰,需要利用到weblogic 提供的一個工具,需要把weblogic.jar加到CLASSPATH。 6.1 生成伺服器和客戶端的信任證書庫: keytool -import -alias rootca -file RootCA.pem -keystore trust.jks 6.2 生成伺服器端身份密鑰庫: java utils.ImportPrivateKey -keystore servera.jks -storepass 123456 -storetype JKS -keypass 123456 -alias servera -certfile ServerA.pem -keyfile ServerAKey.pem 6.3 生成客戶端身份密鑰庫: java utils.ImportPrivateKey -keystore clienta.jks -storepass 123456 -storetype JKS -keypass 123456 -alias clienta -certfile ClientA.pem -keyfile ClientAKey.pem ...生成其他客戶端身份密鑰庫 7. keytool -list -v -keystore clienta.jks (servera.jks) 可以查看其中的證書鏈關系。

Ⅸ 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

Ⅹ 如何用 openssl 生成RSA雙密匙;簽名證書;加密文件郵件

openssl 的功能:
* 生成RSA,DSA雙密匙(還可以再給他們簽名)
* 生成X509 證書
* 計算印章(MD5,SHA,,RIPEMD160)用於加密大文件
*加密,解密 (演算法有 DES, IDEA,RC2 , RC4, Blowfish...)
*SSL 伺服器端/客戶端測試
* 處理簽名或加密了的郵件

閱讀全文

與openssl簽名證書相關的資料

熱點內容
發明文言文 瀏覽:523
國培線下專題研修成果 瀏覽:577
馬鞍山蘇叢勇 瀏覽:109
人民的名義侵權問題 瀏覽:53
全椒到馬鞍山汽車時刻表 瀏覽:899
logo可用字體版權 瀏覽:861
馬鞍山中豪 瀏覽:929
tefl證書在哪裡考 瀏覽:564
小陸離與成果 瀏覽:654
迷你世界冒險轉化創造 瀏覽:680
2014納稅申報期限 瀏覽:274
lol2016猴年限定皮膚 瀏覽:48
陝西房地產估價師證書領取地點 瀏覽:140
證書小知識 瀏覽:431
馬鞍山何兵 瀏覽:376
設計創作版權合作合同範本 瀏覽:482
省知識產權局侯社教 瀏覽:51
道閘3C證書 瀏覽:820
土地使用權期滿地上建築物 瀏覽:455
武漢圓通快遞投訴電話 瀏覽:33