2014-02-26 107 views
2

我想sha256指紋使用openssl。 我試過了,但是你必須要sha1。我該怎麼辦?如何在openssl中創建sha256指紋

我正在使用OpenSSL 1.0.1f。

命令

openssl md5 * >rand.dat 

openssl genrsa -rand rand.dat -aes256 2048 > server.key 

openssl req -new -key server.key -sha256 -config openssl.cfg > server.csr 

openssl x509 -fingerprint -sha256 -in server.csr -req -signkey server.key -extensions v3_req -extfile openssl.cfg -out server.cer 

從默認值更改如下:

[ CA_default ] 
default_md = sha256 # Change 

[ req ] 
req_extensions = v3_req  # Uncomment 
+0

[鏈接] https://www.openssl.org/docs/apps/x509.html# -md2 | -md5 | -sha1 | -mdc2 要使用的摘要。這將影響 使用消息摘要的任何簽名或顯示選項,例如-fingerprint,-signkey和-CA選項。 如果未指定,則使用SHA1。如果用於簽名的密鑰是 DSA密鑰,則此選項不起作用:SHA1始終與DSA密鑰一起使用。 但是,它似乎不影響指紋。 – user3353855

回答

5

我怎麼能OpenSSL中創建一個SHA256指紋

-sha256是正確的。


有簽署服務器的CSR與使用OpenSSL在How do you sign OpenSSL Certificate Signing Requests with your Certification Authority?自己的CA的一個例子。


根據反饋,在使用-fingerprint時,SHA1被硬編碼。下面是從<openssl dir>/apps/x509.c(所有OpenSSL應用程序,如ca,x509, encrypt,decrypt等位於apps/)。大約從線x509.c 935:

else if (fingerprint == i) 
    { 
    int j; 
    unsigned int n; 
    unsigned char md[EVP_MAX_MD_SIZE]; 
    const EVP_MD *fdig = digest; 

    if (!fdig) 
     fdig = EVP_sha1(); 

    if (!X509_digest(x,fdig,md,&n)) 
     { 
     BIO_printf(bio_err,"out of memory\n"); 
     goto end; 
     } 
    BIO_printf(STDout,"%s Fingerprint=", OBJ_nid2sn(EVP_MD_type(fdig))); 
    .... 

至於const EVP_MD *fdig = digestdigest可以設置。但我不知道應該使用什麼開關。從475線左右開始:

else if ((md_alg=EVP_get_digestbyname(*argv + 1))) 
    { 
    /* ok */ 
    digest=md_alg; 
    } 

這看起來讓我失望了。

+0

-fingerprint我試圖刪除但沒有改變。 – user3353855

+0

參照鏈接創建一個CA簽名的證書,但指紋會顯示SHA1。 – user3353855

+0

它看起來像一個bug(請參閱附加信息)。 – jww