廣告聯播

2013年2月21日 星期四

AppServ + OpenSSL Setup in Win32

From: Polin Wei

因為要瞭解憑證,所以需要一個能產生 Private Key,Digital Certificates 及 Trusted Certificate Authorities 的工具,免錢的 OpenSSL 就是一個好的工具,順便結合Apache Httpd Server 作測試。而 AppServ 本身即有 Apache、MySQL、PHP、phpMyAdmin 與 OpenSSL 工具,是最方便的軟體了。

一、準備檔案:
下載 AppServ 2.5.10


二、安裝 Apache Server 與設定:

1. 先行安裝AppServ,預設路徑應該安裝在 C:/AppServ/Apache2.2/,並先停止Apache伺服器。
2. 開啟C:\AppServ\Apache2.2\conf 內的 httpd.conf 作修改
把 LoadModule ssl_module modules/mod_ssl.so 的#註解拿掉
把 Include conf/extra/httpd-ssl.conf 的#註解拿掉
三、在 C:\AppServ\Apache2.2\bin資料夾底下看見openssl.exe,滑鼠double click執行它,用它來作憑證

1. 輸入 genrsa -out server.key 1024 產生rsa私鑰(Server Private Key:server.key)

2. 利用私鑰(Server Private Key:server.key)來產生簽署申請:輸入 req -new -out server.csr -key server.key -config ../conf/openssl.cnf 產生簽署申請
Country Name為國籍鍵入TW
State or Province Name為省份鍵入Taiwan
Locality Name為所在地
Organization Name為組織名稱
Organizational Unit Name為組織內單位
Common Name為domain name
Email Address為管理者的電子信箱
剩餘兩項可不填入
Step 3 & 4 是模擬 CA 第三方認證單位
3. 輸入 genrsa -out ca.key 1024 產生CA的rsa私鑰

4. 輸入 req -new -x509 -days 365 -key ca.key -out ca.crt -config ../conf/openssl.cnf 利用ca私鑰產生待會幫自己主機的簽署憑證,參數同step2上面設定

5. 接著於C:\AppServ\Apache2.2\bin資料夾內新建demoCA資料夾,並於demoCA資料夾內新增newcerts資料夾,與index.txt跟serial檔案,並利用記事本開啟serial後鍵入01後存檔(這裡的值是參考C:\AppServ\Apache2.2\conf\openssl.cnf檔案裡 [ CA_default ] 這區段中的設定)

6. 利用step 3 &4 中模擬CA替網站簽署認證的檔案,私鑰:ca.key & 簽署憑證 ca.crt 兩個檔案來替自己的網站提出的簽署憑證申請檔: server.csr 作簽署憑證,產生憑證:server.crt
輸入ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ../conf/openssl.cnf

詢問是否簽署都回答 Y

7. 將C:\AppServ\Apache2.2\bin底下的私鑰 server.key 及CA簽署過的公鑰 server.crt 兩個檔案複製至C:\AppServ\Apache2.2\conf資料夾底下

8.打開 C:\Appserv\Apache2.2\conf\extra\http-vhost-ssl.conf檔案,修改部份如下:


#   General setup for the virtual host
DocumentRoot "C:/AppServ/www"
ServerName www.xxx.com:443
ServerAdmin xxx.xxx@globeunion.com
ErrorLog "C:/AppServ/Apache2.2/logs/error.log"
TransferLog "C:/AppServ/Apache2.2/logs/access.log"

#   Server Certificate:
SSLCertificateFile "C:/AppServ/Apache2.2/conf/server.crt"
#   Server Private Key:
SSLCertificateKeyFile "C:/AppServ/Apache2.2/conf/server.key"

CustomLog "C:/AppServ/Apache2.2/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

再重啟 Apache Server 即可登入 https://localhost


Troubleshooting:

1. 若有 php_mbstring.dll 檔案遺失的警告,則開啟 C:\Windows\php.ini 將extension=php_exif.dll 放置於 extension=php_mbstring.dll 之後即可解決

2. 在實做的過程中若電腦的 port:443 被佔用著,利用netstat -ano指令可以看到是哪個pid去佔著這個port,再利用 process explorer(在Win7可以執行 Task manager -> Performance -> Resource Monitor)來觀看是哪個程式佔用著,再到服務 Services 關掉即可

參考:

AppServ + OpenSSL Setup SSL(https) in Win32 憑證建立


【php】利用openssl實作ssl網頁加密

2013年2月6日 星期三

Java Keytool的使用及申請憑證(以Microsoft Active Directory Certificate Services為例)

Keytool是一個Java資料證書的管理工具,Keytool將金鑰(key)和證書(certificates)存在一個稱為keystore的檔中 在keystore裡,包含兩種資料:
  • 金鑰實體(Key entity:金鑰(secret key)又或者是私密金鑰和配對公開金鑰(採用非對稱加密)
  • 可信任的證書實體(trusted certificate entries):只包含公開金鑰
ailas(別名)每個keystore都關聯這一個獨一無二的alias,這個alias通常不區分大小寫 

JDK中keytool常用指令:
  • -genkey:在用戶主目錄中創建一個預設檔".keystore",還會產生一個mykey的別名,mykey中包含用戶的公開金鑰、私密金鑰和證書(在沒有指定生成位置的情況下,keystore會存在使用者系統預設目錄,如:對於windows系統,會生成在系統的C:\Documents and Settings\UserName\檔案名為“.keystore”)
  • -alias:產生別名
  • -keystore:指定金鑰庫的名稱(產生的各類資訊將不在.keystore文件中)
  • -keyalg:指定金鑰的演算法 (如 RSA  DSA(如果不指定默認採用DSA))
  • -validity:指定創建的證書有效期多少天
  • -keysize:指定金鑰長度
  • -storepass:指定金鑰庫的密碼(獲取keystore資訊所需的密碼)
  • -keypass:指定別名條目的密碼(私密金鑰的密碼)
  • -dname:指定證書擁有者資訊 例如:  "CN=名字與姓氏,OU=組織單位名稱,O=組織名稱,L=城市或區域名稱,ST=州或省份名稱,C=單位的兩字母國家代碼"
  • -list:顯示金鑰庫中的證書資訊      keytool -list -v -keystore 指定keystore -storepass 密碼
  • -v :顯示金鑰庫中的證書詳細資訊
  • -export:將別名指定的證書匯出到檔  keytool -export -alias 需要匯出的別名
  • -keystore:指定keystore -file 指定匯出的證書位置及證書名稱 -storepass 密碼
  • -file:參數指定匯出到檔的檔案名
  • -delete:刪除金鑰庫中某條目 keytool -delete -alias 指定需刪除的別名; -keystore 指定keystore;-storepass 指定密碼
  • -printcert:查看匯出的證書資訊          keytool -printcert -file yushan.crt
  • -keypasswd:修改金鑰庫中指定條目指令:keytool -keypasswd -alias 需修改的別名 -keypass 舊密碼 -new  新密碼  -storepass keystore密碼  -keystore sage
  • -storepasswd:修改keystore指令:keytool -storepasswd -keystore e:\polin.keystore(需修改口令的keystore) -storepass 123456(原始密碼) -new polinwei(新密碼)
  • -import:將已簽名數位憑證導入金鑰庫  keytool -import -alias 指定導入條目的別名 -keystore 指定keystore -file 需導入的證書

下面是各選項的預設值。
  • -alias "mykey"
  • -keyalg "DSA"
  • -keysize 1024
  • -validity 90
  • -keystore  為使用者主目錄中名為 .keystore 的文件
  • -file 讀入時為標準輸入,寫出時為標準輸出