OpenSSL產生正確顯示中文認證的方法

來源:互聯網
上載者:User
OpenSSL產生正確顯示中文認證的方法 作者:劉凱 mslk.sa@gmail.com      來源:http://blog.csdn.net/mslk     發表時間:2006-10-23     瀏覽次數: 3896      字型大小:大  中  小

用openssl產生正確顯示中文的認證的方法

                     \author    劉凱 mslk.sa@gmail.com

最近要用openssl產生認證,來配合https一起使用,可是沒有根憑證的簽名,只能自簽名一下,當使用者訪問https時會有一個安全警告,查看認證都是一堆字母和數字,裡面如果能顯示一些中文提示資訊,就能讓使用者明白一些,這樣可以少些問題。
openssl的req子命令建立的認證請求只能使用ASCII和UTF-8兩種編碼。
一開始建立的認證總是亂碼,網上只找到了一篇文章[ http://www.infosecurity.org.cn/forum/read.php?fid=11&tid=201&fpage=1]是說如何建立中文認證的解決辦法,其中還要修改openssl原始碼,仔細看了他的修改方法,這是把所有的ASCII都作為UTF-8來處理了,因為主要修改的是:
switch(inform)的case MBSTRING_ASC
switch(outform)的case MBSTRING_ASC
部分的代碼。

感覺他改的不對,就沒有用他的辦法改這部分代碼,我就看了case MBSTRING_UTF8部分的代碼,主要有兩個函數比較重要,都在檔案a_utf8.c中
switch(inform)時的UTF8_getc函數
switch(outform)時的UTF8_putc函數
裡面的位操作很多,因一直對unicode的東西不熟悉,又看了UTF-8的資料,http://www.linuxforum.net/books/UTF-8-Unicode.html,這裡摘錄一下UTF-8的重要特性:

    * UCS 字元 U+0000 到 U+007F (ASCII) 被編碼為位元組 0x00 到 0x7F (ASCII 相容). 這意味著只包含 7 位 ASCII 字元的檔案在 ASCII 和 UTF-8 兩種編碼方式下是一樣的.
    * 所有 >U+007F 的 UCS 字元被編碼為一個多個位元組的串, 每個位元組都有標記位集. 因此, ASCII 位元組 (0x00-0x7F) 不可能作為任何其他字元的一部分.
    * 表示非 ASCII 字元的多位元組串的第一個位元組總是在 0xC0 到 0xFD 的範圍裡, 並指出這個字元包含多少個位元組. 多位元組串的其餘位元組都在 0x80 到 0xBF 範圍裡. 這使得重新同步非常容易, 並使編碼無國界, 且很少受丟失位元組的影響.
    * 可以編入所有可能的 231個 UCS 代碼
    * UTF-8 編碼字元理論上可以最多到 6 個位元組長, 然而 16 位 BMP 字元最多隻用到 3 位元組長.
    * Bigendian UCS-4 位元組串的排列順序是預定的.
    * 位元組 0xFE 和 0xFF 在 UTF-8 編碼中從未用到.

強烈建議配合這些特性看這兩個函數(UTF8_getc、UTF8_putc),會很有收穫的,能充分理解UTF-8。
可以肯定是,openssl中已完全實現了UTF-8的功能,可以製作中文認證。

經過各種實驗終於可以在認證中使用UTF-8正確顯示中文了,方法如下:
一、假設設定檔為openssl.cnf(在openssl-0.9.8.d/apps/目錄下),編輯修改如下內容:
string_mask = utf8only
countryName_default                = CN
stateOrProvinceName_default    = 中文的省份名稱
localityName_default                = 中文的城市名稱
0.organizationName_default    = 組織、公司
organizationalUnitName_default    = 組織機構
commonName_default             = 劉凱的中文認證
二、用如下命令轉換檔格式為UTF-8
iconv -f gbk -t utf-8 openssl.cnf > openssl_utf8.cnf
三、用openssl產生認證簽章要求時,加上-utf8和將設定檔指定為openssl_utf8.cnf
openssl req -utf8 -config openssl_utf8.cnf -new -out server.req
除了輸入密碼,其他的一律enter,就OK了

然後將認證簽章要求簽名一下就產生有中文的認證了。
openssl x509 -in server.req -out server.crt -signkey privkey.pem -days 365

好了,安裝一下server.crt,可以看看其中的中文資訊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.