廣告聯播

2013年6月11日 星期二

GnuPG (GPG) In Win32 免費檔案加解密軟體概念與常用指令

From: Polin Wei

GnuPG (GPG) 是一套完全免費的軟體( GnuPG is the GNU project's complete and free implementation of the OpenPGP standard as defined by RFC4880 . ),也有在實務的商務中使用,安全性很高值得一用。

GnuPG 概念:
GPG, like PGP (Pretty Good Privacy), uses a key pair. This means that when you generate a key, you will create a public copy as well as private copy. The private copy is your copy used to decrypt an incoming file as well sign an outgoing file (but for our purposes, we are only using it to decrypt). The public key is the key you give to the public, which is used to encrypt the files coming to you. First we will create your own key.

These keys are stored in key rings. For GPG, they are stored in the directory that the GPG files were copied into. They are both named with a .GPG extension, and are called pubring.GPG and secring.GPG (to denote the public key ring and the private key ring, respectively).

原文的意思主要是說:GPG 會產生一組 Key ,一個是私鑰 ( Private Key:secring.GPG ) 用來解碼檔案,以及傳出檔案時作簽章 ( sign );一個是公鑰( Public Key:pubring.GPG )是要給客戶的,當客戶要傳檔案給你時,用此公鑰作加密。兩個檔案都是以 .GPG 作為附檔名。

GPG 常用的指令有:
  • gpg --gen-key            /** 產生組 Key ,私鑰 ( Private Key:secring.GPG )&公鑰( Public Key:pubring.GPG ) **/
  • gpg --edit-key [USER-ID] /** 對 USER-ID 作業 **/
        Command> passwd      /** 修改secret key的 Passphrase **/
  • gpg --import             /** 匯入客戶的金鑰 **/
        Command> trust       /** 對此客戶作信認 **/
  • gpg --list-keys          /** 列出所有的公鑰資訊 **/
  • gpg --list-secret-keys   /** 列出私鑰的資訊 **/
  • gpg --encrypt --armor --recipient [public key] --output encryptedfilename unencryptedfilename        /** 加密檔案 **/
  • gpg --always-trust --passphrase-fd 0 --output C:\gnupg\Decrypt\unencryptedfilename  -u "[USER-ID]" --no-tty --decrypt C:\gnupg\Encrypt\encryptedfilename < [passphrase.file] /** 解密 **/
  • gpg --delete-key hex value /** 移除信認的 USER-ID **/

     繼續閱讀:

    GnuPG (GPG) In Win32 免費檔案加解密軟體概念與實作

    GnuPG (GPG) In Win32 免費檔案加解密軟體的運用

     


     

    2013年5月28日 星期二

    php session中存取物件(Object)解决方案

    From: Polin Wei



    在使用java開發時,通常會將物件 Object 存放在session裡面,以便後續的作業中可以取得。但在使用php開發時,在session中存入物件,確實能把物件放進去,也能把整個物件輸出,但就是取不出物件裡面的屬性。會發生下面類似的錯誤資訊:

    USER => __PHP_Incomplete_Class Object (21)
         ->__PHP_Incomplete_Class_Name = "objUser"
         ->user_uid = 0
     這搞了很久,才發現php手冊中有一篇講的是 “序列化物件 - 會話中的物件”,存取應用下列方法:
    • 存放物件在session:
    $_SESSION["USER"] = serialize($USER);

    • 從session取出物件:
    $USER = unserialize( $_SESSION["USER"] );
     可以用 print_r($USER); 傾印出來看應該就正常,這樣這個物件可以正常使用了。

    2013年3月11日 星期一

    Windows 8 MAK 啟動方式

    From: Polin Wei



    請在開始功能表的”執行”輸入”cmd(或是以Win Key+ X),再輸入
    slmgr.vbs ipk xxxxx- xxxxx- xxxxx- xxxxx- xxxxx
    透過Slmgr ipk方式輸入MAK的金鑰至Windows系統
    再至控制台內啟動Windows
    以這種方式就能完成以MAK序號進行啟動.
     

    2013年3月3日 星期日

    QNAP Install DNS Server with BIND ipkg & Auto Run DNS Service

    From: Polin Wei

    買了一台 QNAP TS-119P II ,內鍵沒有 DNS Server 服務,但它提供自行安裝 IPKG 的服務,下面就 Step by Step 來作 DNS Server 安裝設定:

    Step 1:安裝  Optware IPKG 套件
    登入 QNAP WEB 管理介面,一般來說是 http://qnap ip address:8080,在 首頁 >> 應用服務 >> QPKG Center 的可安裝頁面,選擇 Optware IPKG 安裝

    Step 2: 安裝 bind 套件
    登入 Optware 的管理介面,一般來說是 http://qnap ip address/Optware

    Sync packages no yes
    Type: NONE
    Filter

    尋找 bind 套件,並按下 install 安裝

    Install bind

    Installing bind (9.6.1.3-4) to root...
    Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/bind_9.6.1.3-4_arm.ipk
    Installing openssl (0.9.8v-2) to root...
    Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/openssl_0.9.8v-2_arm.ipk
    Installing psmisc (22.17-1) to root...
    Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/psmisc_22.17-1_arm.ipk
    Configuring bind
    Running post-install
    You must now create your named.conf file
    When it is installed in /opt/etc/named/named.conf, execute
                  /opt/etc/init.d/S09named start
    to start service
    You will probably also want to create rndc.conf by running
    rndc-confgen.  Of course, you may want to set your name server
    in the GUI to 127.0.0.1 or your local ip-address
    Configuring openssl
    Configuring psmisc
    update-alternatives: Linking //opt/bin/killall to /opt/bin/psmisc-killall
    update-alternatives: Linking //opt/bin/pidof to /opt/bin/psmisc-killall
    Successfully terminated.
    
    Step 3:Enable SSH Connection 設定 SSH 連結
    將 首頁 >> 網路服務 >> Telnet / SSH 的功能啟動,SSH 的連線工具PuTTY可以從 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 網址下載

    Step 4:建立 rndc.key 檔案
    PuTTY連入 QANP 主機,並進入目錄 /opt/etc/named ,若此目錄不存在,則建立此目錄

    mkdir /opt/etc/named
    並在此目錄建立 rndc.key
    [/opt/etc/named] # /opt/sbin/rndc-confgen -a
    wrote key file "/opt/etc/named/rndc.key"


     
    Step 5:CONFIGURING BIND 下列的步驟開始設定 Bind 的 Named 組態

    建立必要的系統檔:
    • named.conf
    每個 DNS Zone 的檔案:
    • db.localhost
    • db.localhost.rev
    • db.leedomain.com
    • db.192.168.2.rev
    named.conf
    # Goes in /opt/etc/named/named.conf

    acl "home" { 192.168.2.0/24; 127.0.0.1; };

    options {
            directory "/opt/etc/named";
            allow-query { "home"; };
            allow-recursion { 192.168.2.0/24; 127.0.0.1; };
            forwarders { 192.168.2.3;8.8.8.8; };
    };

    controls {
            inet 127.0.0.1 allow { localhost; } keys { rndc-key; };
    };

    // log to /var/log/named/example.log all events from info UP in severity (no debug)
    // defaults to use 3 files in rotation
    // BIND 8.x logging MUST COME FIRST in this file
    // BIND 9.x parses the whole file before using the log
    // failure messages up to this point are in (syslog) /var/log/messages
    //
    //logging {
    //  channel weidns_log {
    //   file "/var/log/weidns.log" versions 3 size 2m;
    //   severity info;
    //   print-severity yes;
    //   print-time yes;
    //   print-category yes;
    //};
    //category default {
    //  weidns_log;
    //};
    //};

    // Add local zone definitions here.
    zone "localhost" {
            type master;
            file "db.localhost";
            allow-update { none; };
            notify no;
    };


    zone "0.0.127.in-addr.arpa" {
            type master;
            file "db.localhost.rev";
            allow-update { none; };
            notify no;
    };

    zone "weidns.com" {
            type master;
            file "db.weidns.com";
            allow-update { key "rndc-key"; };
            notify yes;
    };

    zone "2.168.192.in-addr.arpa" {
            type master;
            file "db.192.168.2.rev";
            allow-update { key "rndc-key"; };
            notify yes;
    };

    zone "." {
            type hint;
            file "root.servers";
    };

    include "/opt/etc/named/rndc.key";

    db.localhost
    ;Goes in /opt/etc/named/db.localhost
    $TTL    86400 ; 24 hours could have been written as 24h
    $ORIGIN localhost.
    ; line below = localhost 1D IN SOA localhost root.localhost
    @  1D  IN        SOA @  root (
                                  2013030301 ; serial
                                  3H ; refresh
                                  15 ; retry
                                  1w ; expire
                                  3h ; minimum
                                 )
    @  1D  IN  NS @
       1D  IN  A  127.0.0.1


    db.localhost.rev
    ;Goes in /opt/etc/named/db.localhost.rev
    $TTL    86400 ;
    ; could use $ORIGIN 0.0.127.IN-ADDR.ARPA.
    @       IN      SOA     localhost. root.localhost.  (
                            2013030301 ; Serial
                            3h      ; Refresh
                            15      ; Retry
                            1w      ; Expire
                            3h )    ; Minimum
            IN      NS      localhost.
    1       IN      PTR     localhost.

    db.weidns.com
    ; weidns.com
    ;Goes in /opt/etc/named/db.weidns.com
    $TTL    604800
    @       IN      SOA     ns1.weidns.com.      root.weidns.com.     (
                    2013030301 ; Serial
                        604800 ; Refresh
                         86400 ; Retry
                       2419200 ; Expire
                       604800) ; Negative Cache TTL
    ;
    @       IN      NS      ns1
            IN      MX      10 mail
            IN      A       192.168.2.3
    ns1     IN      A       192.168.2.3
    mail    IN      A       192.168.2.3

    db.192.168.2.rev
    ;Goes in /opt/etc/named/db.192.168.2.rev
    $TTL    86400   ; 1 day
    $ORIGIN 2.168.192.in-addr.arpa.
    @       1D      IN      SOA  ns1.weidns.com. root.weidns.com.     (
                    2006080801 ; Serial
                        604800 ; Refresh
                         86400 ; Retry
                       2419200 ; Expire
                       604800) ; Negative Cache TTL
    ;
    ; Name servers
    3               IN NS   ns1.weidns.com.
    ;
    ; Fixed host mappings allegedly inserted by DDNS

    root.servers


    Step 6:啟動 DNS

    /opt/etc/init.d/S09named start
    /opt/etc/init.d/S09named restart
    /opt/etc/init.d/S09named status 
    Step 7: 驗證 DNS

    可以使用 dig 的指令來利用此 DNS 服務,來反查是否正常運作
    dig @ polinwei.blogspot.com
    可以使用  named -g 來偵錯

    讓 DNS 在開機時自動執行

    DNS 既然要提供服務,自然希望QNAP開機時可以自動執行。這裡您會發現QNAP系統跟其它主流Linux發行版本其中一個很不一樣的地方:它沒有完整支援upstart或者init.d來啟動服務。根據QNAPedia的這篇文章,節錄相關步驟:

    查看 /etc/config/qpkg.conf 這個檔案:

    
    
    # cat /etc/config/qpkg.conf
    宣告一個autorun套件來利用ipkg自動啟動機制:

    [autorun]
    Name = autorun
    Version = 0.1
    Author = PolinWei
    Date = 2013-06-08
    Shell = /share/MD0_DATA/.qpkg/autorun/autorun.sh
    Install_Path = /share/MD0_DATA/.qpkg/autorun
    Enable = TRUE

    其中, ‘Shell’就是要被自動執行的shell腳本。每次QNAP啟動時,那個腳本就會被執行,所以,我們可以將要自動被執行的程式碼寫在那個檔案內。請按照下列步驟建立autorun.sh檔案:

    # mkdir -p /share/MD0_DATA/.qpkg/autorun
    # touch /share/MD0_DATA/.qpkg/autorun/autorun.sh
    # chmod +x /share/MD0_DATA/.qpkg/autorun/autorun.sh

    編輯 autorun.sh ,它的內容會隨後續設定而修改,一個基本可以執行 DNS 的腳本

    # vi /share/MD0_DATA/.qpkg/autorun/autorun.sh

    內容如下:

    #!/bin/sh
    
    # starts the DNS server
    /opt/etc/init.d/S09named start


    參考:
    http://www.nslu2-linux.org/wiki/HowTo/BuildPrimaryDNSServer
    http://crippaandrea.it/blog/2012/05/13/installing-bind-on-qnap
    http://blog.eavatar.com/post/2013/11/setup-home-vpn-server-with-softether-qnap-nas/

    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 讀入時為標準輸入,寫出時為標準輸出

    2013年1月24日 星期四

    Smarty Initial installation 模板引擎–基本安裝

    From: Polin Wei

    Smarty 下載最新版本,分成版本 V2 或 V3 但初始安裝設定,v2 的寫法目前都仍可以使用,將下載下來的解壓在目錄C:/AppServ/www/project/includes/smarty ,配置如下:
    
    // 定義網站位置
    define('HOST_ROOT', 'C:/AppServ/www/project'); // 最後沒有斜線
    require('includes/smarty/libs/Smarty.class.php');
    
    //定義 Smarty
    $smartyTpl = new Smarty();
    // 上述與此 $smartyTpl = new Smarty; 這兩種程式撰寫是相同的,當一個Object的 default construct 沒有參數的時候,括弧可以不用寫。
    
    /*smarty v3 的寫法*/
    $smartyTpl->setTemplateDir(HOST_ROOT . "/smarty/templates/" )
        ->setCompileDir(HOST_ROOT . "/smarty/templates_c/")
        ->setConfigDir(HOST_ROOT . "/smarty/configs/")
        ->setCacheDir(HOST_ROOT . "/smarty/cache/")
        ->addPluginsDir(HOST_ROOT . "/smarty/plugins/");
    
    
    /*smarty v2 的寫法,也可適用
    $smartyTpl->template_dir = HOST_ROOT . "/smarty/templates/";
    $smartyTpl->compile_dir  = HOST_ROOT . "/smarty/templates_c/";
    $smartyTpl->config_dir   = HOST_ROOT . "/smarty/configs/";
    $smartyTpl->cache_dir    = HOST_ROOT . "/smarty/cache/";    
    */  
    
    $smartyTpl->debugging = true;
    $smartyTpl->caching = true;
    $smartyTpl->cache_lifetime = 120;
    $smartyTpl->force_compile = true;
    
    //定義 Smarty 樣版變數的前/後符號
    //$smartyTpl->left_delimiter = '<{';
    //$smartyTpl->right_delimiter = '}>';
    

    WordPress 架站必備外掛