Home

2009年2月25日 星期三

[JBoss] JBoss 建立 SSL 以便使用 HTTPS 登入

From: Polin Wei

什麼是 SSL ? 它就是 Secure Socket Layer 的縮寫 , 它是一種架構於 TCP 之上的安全通訊協定 , 它可以有效地協助 Internet 應用軟體提升通訊時的資料完整性以及安全性。

SSL ( Secure Socket Layer )是業界採用的加密通訊協定標準,可以安全地透過網路,傳輸使用者的個人或信用卡等資料,博客來也是使用此種技術,保障會員資料的安全。通常,必須使用 SSL 連接的網頁,其網址的開頭應該會是「https:」,而不是「http:」。因此只要在瀏覽器的網址欄看見開頭為「https:」時,就表示你目前是透過 SSL 連線。

那在 JBoss 如何建立呢? 作法如下:

開發環境:
作業系統 :windowsXP
JBoss : JBoss-4.0.3SP1
JDK: 1.6.x

Step 01: 生成KeyStore
在cmd執行keytool -genkey -alias tomcat -keyalg RSA -keystore chap8.keystore
PS: -validity 3650 這個參數可以讓憑證的有效期變延長, 以這個參數為例, 為 10 年

D:\>keytool -genkey -alias tomcat -keyalg RSA -keystore chap8.keystore
輸入 keystore 密碼:  12345
您的名字與姓氏為何?
  [Unknown]:  polin
您的編制單位名稱為何?
  [Unknown]:  wei
您的組織名稱為何?
  [Unknown]:  polinwei
您所在的城市或地區名稱為何?
  [Unknown]:  taichung
您所在的州及省份名稱為何?
  [Unknown]:  taichung
該單位的二字國碼為何
  [Unknown]:  tw
CN=polin, OU=wei, O=polinwei, L=taichung, ST=taichung, C=tw 正確嗎?
  [否]:  y
輸入 <tomcat> 的主密碼(RETURN 如果和 keystore 密碼相同):
說明:輸入的密碼不要帶特殊字元,否則在運行JBoss時可能會出錯。


Step02:
將產生的chap8.keystore放到 $JBOSS_HOME\server\default\conf下

Step03:
修改 $JBOSS_HOME\server\default\deploy\jbossweb-tomcat55.sar\server.xml
<!-- SSL/TLS Connector configuration using the admin devl guide keystore
      <Connector port="8443" address="${jboss.bind.address}"
           maxThreads="100" strategy="ms" maxHttpHeaderSize="8192"
           emptySessionPath="true"
           scheme="https" secure="true" clientAuth="false"
           keystoreFile="${jboss.server.home.dir}/conf/chap8.keystore"
           keystorePass="rmi+ssl" sslProtocol = "TLS" />
      -->
上面的<!-- -->  移除, 並修改紅色部份
      <Connector URIEncoding="UTF-8" port="443" address="${jboss.bind.address}"
           maxThreads="100" strategy="ms" maxHttpHeaderSize="8192"
           emptySessionPath="true"
           scheme="https" secure="true" clientAuth="false"
           keystoreFile="${jboss.server.home.dir}/conf/chap8.keystore"
           keystorePass="12345" sslProtocol = "TLS" />


Step04:
重新啟動Jboss,在流覽器位址欄中分別輸入http://localhost:8080,https://localhost:443 能夠正常訪問,再輸入https://localhost/也能正常流覽

參考文獻: JBoss Web - SSL Configuration HOW-TO

[Linux] CentOS - Apache server with SSL 的作法

From: Polin Wei

環境:
Cent OS 5.x
Apache 2.x
Domain: mydomain.com
Host: myssl.mydomain.com

Step 01:
# cd /etc/pki/tls/certs

Step 02: 建立金鑰, 要輸入相關的 國家,省份,城巿,主機名(country,state,city,host name)

[root@myssl certs]# make mycert.crt
umask 77 ; \
/usr/bin/openssl genrsa -des3 1024 > mycert.key
Generating RSA private key, 1024 bit long modulus
......................................................................++++++
...........++++++
e is 65537 (0x10001)
Enter pass phrase: **** <== 這裡要輸入金鑰的密碼
Verifying - Enter pass phrase: **** <== 重新輸入金鑰的密碼
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key mycert.key -x509 -days 365 -out mycert.crt -set_serial 0
Enter pass phrase for mycert.key: **** <== 再輸入一次金鑰的密碼
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:tw
State or Province Name (full name) [Berkshire]:Taichung
Locality Name (eg, city) [Newbury]:Taichung
Organization Name (eg, company) [My Company Ltd]:MyCorp.
Organizational Unit Name (eg, section) []:WEI
Common Name (eg, your name or your server's hostname) []:myssl.mydomain.com
Email Address []:root@mydomain.com


這時, 會在 /etc/pki/tls/certs 產生兩個檔 mycert.crt & mycert.key

Step03:
移動 mycert.key 到 /etc/pki/tls/private
mv mycert.key /etc/pki/tls/private

Step04: 修改 /etc/httpd/conf.d/ssl.conf 檔案中的參數

SSLCertificateFile /etc/pki/tls/certs/mycert.crt
SSLCertificateKeyFile /etc/pki/tls/private/mycert.key


Step05: 重新啟動 httpd 服務,
[root@myssl certs]# service httpd start
Starting httpd: Apache/2.2.3 mod_ssl/2.2.3 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server svn.globeunion.com:443 (RSA)
Enter pass phrase: *** <== 這裡要輸入金鑰的密碼

OK: Pass Phrase Dialog successful.
[ OK ]



Step06: 檢查 ssl 是否有在運作
netstat -an|grep 443

每次啟動 httpd 時, 都會詢問您的 金鑰的密碼 , 若要讓 httpd 不要每次詢問的話可以這麼作

[root@myssl tls]# openssl rsa -in mycert.key -out mycert.pem
Enter pass phrase for private/svncert.key: <== 輸入您的 金鑰的密碼
writing RSA key <== 完成


這樣會產生一個 mycert.pem 的檔案.
[root@myssl tls]# cp mycert.pem /etc/pki/tls/private/


Step07: 修改 /etc/httpd/conf.d/ssl.conf 檔案中的參數

SSLCertificateFile /etc/pki/tls/certs/mycert.crt
SSLCertificateKeyFile /etc/pki/tls/private/mycert.pem


這樣每次重開 httpd 就不會要您輸入 金鑰的密碼
[root@myssl tls]# service httpd restart


另外一種產生 SSL 方法如下:

1. go to /etc/pki/tls/certs
2. make mycert.pem
3. Enter the information about country,state,city,host name etc, your certificate and key has been created .
4. now go to /etc/httpd/conf.d/ssl.conf and change..
SSLCACertificateFile /etc/pki/tls/certs/mycert.pem
SSLCACertificateKeyFile /etc/pki/tls/mycert.pem
5. save changes.
6. on shell prompt service httpd start

2009年2月24日 星期二

[Blogger] 部落格上的相關文章

From: Polin Wei

三個步驟, 讓您的 Blogger 的每一篇文章被點閱時, 可以顯示與這篇文章相關 標籤(Label) 的文章

step 01:

首先在 版面配置->修改 HTML 中的 </head> 標籤前,塞入以下這段 Javascript ():

<script type='text/javascript'>

//<![CDATA[

<!-- Script functions for Related Posts: RelatedLabels(), RemoveDuplicatedPosts(), contains(), ShowRelatedPosts()-->

var relatedPostsNum = 0;

var relatedTitles = new Array();

var relatedUrls = new Array();

var relatedDates = new Array();



function RelatedLabels(json) {

  var regex1=/</g, regex2=/>/g;

  for (var i = 0; i < json.feed.entry.length; i++) {

    var entry = json.feed.entry[i];

    relatedTitles[relatedPostsNum] = (entry.title.$t.replace(regex1, '&lt;')).replace(regex2, '&gt;');

    relatedDates[relatedPostsNum] = entry.published.$t.substr(0,10);

    for (var j = 0; j < entry.link.length; j++) {

      if (entry.link[j].rel == 'alternate') {

        relatedUrls[relatedPostsNum] = entry.link[j].href;

        relatedPostsNum++;

        break;

      }

    }

  }

}



function RemoveDuplicatedPosts(PostUrl) {

  var tmpUrls = new Array(0);

  var tmpTitles = new Array(0);

  var tmpDates = new Array(0);

  function contains(a, e) {

    for(var j = 0; j < a.length; j++)

      if (a[j]==e)

        return true;

    return false;

  }

  for(var i = 0; i < relatedUrls.length; i++) {

    if(!contains(tmpUrls, relatedUrls[i]) && PostUrl != relatedUrls[i]) {

      tmpUrls.length += 1;

      tmpUrls[tmpUrls.length - 1] = relatedUrls[i];

      tmpTitles.length += 1;

      tmpTitles[tmpTitles.length - 1] = relatedTitles[i];

      tmpDates.length += 1;

      tmpDates[tmpDates.length - 1] = relatedDates[i];

    }

  }

  relatedTitles = tmpTitles;

  relatedUrls = tmpUrls;

  relatedDates = tmpDates;

}



function ShowRelatedPosts(PostUrl) {

  RemoveDuplicatedPosts(PostUrl);

  var r = Math.floor((relatedTitles.length - 1) * Math.random());

  var i = 0;

  if (relatedTitles.length > 0) {

    document.write('Related Posts: <ul>');

    while (i < relatedTitles.length && i < 5) {

      document.write('<li><a href="' + relatedUrls[r] + '">' + relatedTitles[r] + '</a> - ' + relatedDates[r] + '</li>');

      if (r < relatedTitles.length - 1)

        r++;

      else

        r = 0;

      i++;

    }

    document.write('</ul>');

  }

}

//]]>

</script>


函示裡紅字的部分,是用來控制相關文章的數量,這裡用五篇

Step02:

找到下面這段程式段(在文章內容後面顯示分類標籤的程式):
<b:if cond='data:post.labels'>

<data:postLabelsLabel/>

<b:loop values='data:post.labels' var='label'>

<a expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='data:label.isLast != "true"'>,</b:if>

</b:loop>

</b:if>


在迴圈結束 </b:loop> 前面塞入呼叫收集相關文章的函示,像下面這樣:
<b:if cond='data:post.labels'>

<data:postLabelsLabel/>

<b:loop values='data:post.labels' var='label'>

<a expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='data:label.isLast != "true"'>,</b:if>

    <!-- Fixed for Related Posts -->

    <b:if cond='data:blog.pageType == "item"'>

       <script expr:src='"/feeds/posts/default/-/" + data:label.name + "?alt=json-in-script&amp;callback=RelatedLabels&amp;max-results=10"' type='text/javascript'/>

</b:if>

</b:loop>

</b:if>


紅色的部分也是用來限制數量,數字加大,可以增加相關文章的亂數樣本,也就是相關文章可以顯示越多舊的相關文章。

Step 03:
抓完文章當然就是找地方顯示囉!只有一個限制:一定放要在文章分類標籤那段的後面(上面這段 標籤的後面就可以,位置依自己的樣版外觀調整)這部分呼叫顯示相關文章的程式碼如下:
<!-- Fixed for Related Posts -->

<b:if cond='data:blog.pageType == "item"'>

  <script type='text/javascript'>

    ShowRelatedPosts(&#39;<data:post.url/>&#39;);

  </script>

</b:if>



if cond='data:blog.pageType == "item"' 這個判斷句代表: 當目前所在頁面是特定文章的連結內頁才會發生,所以上述的顯示相關文章效果,在首頁是看不到的,要隨便點入一篇文章的內頁連結(當然,那篇文章要有加註標籤被分類過),在顯示標籤的後面才會跑出來。

參考文獻: Abin's Tech Note 加入相關文章功能 (Related Post)

2009年2月19日 星期四

[Blogger] 部落格上的隨選文章

From: Polin Wei

部落格上的隨選文章, 可以使用 B Stir 來讓網友繼續讀取其它的文章.



標籤說明:
Blog URL-你的Blog網址
Keyword-顯示文章的關鍵字(建議不選)
Snippets-是否顯示全文
Border-邊框
Results顯示文章篇數(1至5篇)
Background-背景顏色
Dynamic Widget-只顯示一則隨機文章。
Static Widget-顯示所有的隨機文章,文章數量就是在Results設定的。

按下 Advanced 後, 可以將這個 widget 安裝在 Blogger , facebook , widgetbox 這三個部落格中, 若您的部落格不是以上三種, 也可以將下列的程式碼複制在您的網頁中. 下列的程式碼是以 我與小崴崴的工作日記 為例

<script language='Javascript' src='http://stuffablog.com/bstir/service?blogurl=http://polinwei.blogspot.com/&output=html&results=5&border=1&snippets=no&encoding=UTF-8&keywords=' type='text/javascript'> </script>

2009年2月12日 星期四

[Blogger] Google Calendar 嵌入式日曆

From: Polin Wei

在網頁上要嵌入日曆, 使用 Google Calendar 快速建立, 可以讓您方便記錄您的工作外, 還可以與別人分享. 作法如下:

step 1:
先申請一個 Google 的帳號, 然後進入 Google Calendar

step 2:
可以建一個新的日曆 Calendar , 或用預設的也可以


step 3:
將框框內的 HTML 語法 Copy 到您的網頁內即可


step 4:
可以設定是否要公開您的日曆


step 5:
若您不公開時, 別人到您的網站 就看不到任何記事了.

2009年2月11日 星期三

[dotProject] dotProject 與 AD 使用 LDAP 的帳號整合

From: Polin Wei

dotProject 運作的環境:
OS: Cent OS 4.x
GD: 2.0.33-9.4
WEB: Apache HTTP Server 2.2.3-22
PHP: 5.1.6-23
MySQL: 5.0.45-7
dotProject: dotProject_2.1_RC2_20070529_UTF-8_Chinese_by_Markwu.zip (目前穩定的版本)
下載點1(備用網站): dotProject_2.1_RC2_20070529_UTF-8_Chinese_by_Markwu.zip
下載點2(官方網站): dotProject_2.1_RC2_20070529_UTF-8_Chinese_by_Markwu.zip

LDAP 認證的環境:
OS: Windows Server 2k3 SP2
Domain: mydomain.com
Host: ad.mydomain.com
LDAP Search User: dotprojecter ( 此 User 放在 Windows Server 2k3 AD 內定的 Users 目錄CN下)

安裝的文章可以參考 使用 DotProject 架設 Project Server,整合 AD 2003 帳號(適用 CentOS 4) 但此篇文章中有一些設定上的錯誤. 修正如下:

1. 點選「System Admin / System Configuration」。

2. 在「User Authentication Settings」中參考下列參數:
   User Authentication Method:LDAP
   Postnuke login also allows Standard Login:打勾

3. 在「LDAP Settings」中參考下列參數:
   LDAP Host:ad.mydomain.com <- AD Server
   LDAP Port:389
   LDAP Version:3
   LDAP Base DN:dc=mydomain,dc=com <- 這裡只要輸入 Domain Name 即可
   LDAP User Filter:(sAMAccountName=%USERNAME%)
   LDAP Search User:cn=dotprojecter,cn=Users,dc=mydomain,dc=com <- 搜尋用的帳號,需使用完整的 DN , 注意預設的 Users , 是 cn , 不是 ou
   LDAP Search User Password:*******
   LDAP also allows standard login:打勾
   點選「Save」儲存。

這樣就可以了

2009年2月8日 星期日

網頁顯示 MSN 的狀態並讓訪客與您對談

From: Polin

  在您的部落格上顯示您的 MSN 狀況,可以用來進行個人溝通、商業交流或提供線上即時客戶服務。讓個人網頁或部落格的瀏覽者、郵件服務的收件者、或電子商務及企業網頁的造訪者,能夠找到與你進行即時通訊溝通的方式,同時能保有雙方的帳號隱私。這樣的運用似乎是不錯的商業模式,重點是它還不用任何費用。

依下列幾個步驟就可以達成:



step01:


先申請好一個 MSN Messager 的帳號,再登入 http://settings.messenger.live.com/applications/websettings.aspx

step02:





將此頁下方的程式碼 copy 到你的網頁上




step03:

訪客只要在您的網頁上按 開始對話


step04:
輸入訪客的暱稱, 如訪客


step05:
為了安全, 系統會要求訪客輸入亂碼的值.



step06:
這樣就可以開始與版主對話了


2009年2月5日 星期四

[Hyperion] 設定 Hyperion 與 Microsoft AD 認證整合 Integrate Oracle Internet Directory With AD

From: Polin Wei

上一篇 [Hyperion] Windows Server 2k3 + Oracle XE + Hyperion 9.3.1 安裝步驟 作好後, 登入到 Essbase Server 時, 就會牽涉到權限認證的問題. 所以該如何與 AD 作好整合認證就顯得重要了.

要與 AD 的帳號作整合認證的作法如下:
環境:
OS: windows 2k3
Host Name: ad.mydomain.com
AD Domain: mydomain.com
LDAP 認證帳號為 AD 的 administrator
Hyperion Essbase 9.3.1


step 01: 進入 User Management Console 的界面
http://localhost:58080/interop/
帳號/密碼 為預設的 admin/password



step 02: Configure User Directories


加入一筆 LDAP 記錄


選擇 Microsoft Active Directory (MSAD)


依環境提供的值填入, 下圖中的 Base DN 只要填入AD伺服器中的網域(Domain Name)名即可, 如
mydomain.com , 在 AD 的識別為 cn=myadmin,cn=com



登入系統所需認證的相關資訊, 可以先輸入 cn=administrator 然後按 Go , 系統會自動帶出 AD 裡的參數值


Enable Support Group 啟動支援群組, 這樣會比較彈性


step03: 讓 AD 加入系統認證的行列中



step04: 作好以上設定後, 要重啟 HSS (Hyperion S9 Shared Services) 服務, 這樣就可以了






參考文獻
Configuring Oracle Internet Directory, MSAD, and Other LDAP-Enabled User Directories

2009年2月4日 星期三

[Hyperion] Windows Server 2k3 + Oracle XE + Hyperion 9.3.1 安裝步驟

From: Polin Wei

環境:

OS: Windows Server 2k3 + SP2
DB: Oracle XE
Hyperion : 9.3.1


step 01: 準備 Windows Server 作業平台
將 Windows Server 2k3 + SP2 依一般程序裝好

step 02: 安裝資料庫
將 Oracle XE 裝好並建立好一個帳號備用, 步驟如下:

step 02.A: Create tablespace : hyperion
CREATE TABLESPACE hyperion
LOGGING
DATAFILE 'C:\oraclexe\oradata\XE\hyperion_data1.dbf' SIZE 174080K AUTOEXTEND ON NEXT 1280K MAXSIZE 10485760K
EXTENT MANAGEMENT LOCAL
ONLINE;


step 02.B: Create User : hyperion
create user hyperion identified by password
default tablespace hyperion
temporary tablespace temp ;


step 02.C: Grant permission
grant create session,resource to hyperion;

step03: 安裝 Hyperion
注意:
1. 下列所說的設定, 即是執行 Hyperion Configuration Utility
2. 若要選擇所在地區 Location , 均選擇 Other

step03.A: 安裝並設定Shared Services

設定Shared Services


選取下列項目


Oracle 資料庫連結的設定資料如 step 02: 安裝資料庫


選擇 Apache Tomcat5 作為 HTTP Server



step03.B: 安裝Reporting and Analysis Services (BI Services)
除了下列不選取外, 其餘的均打勾.


在此先不作設定(不執行 Hyperion Configuration Utility)


step03.C: 安裝UI Services
選取 Workspace 即可, 但為了瞭解 Web Analysis 有何功能 , 在此我也勾選了 Web Analysis


step03.D: 設定Reporting and Analysis Services
BI Services & UI Services 安裝好後, 就要執行 Hyperion Configuration Utility , 將這些服務給註冊起來, 才可以使用


註冊的服務如下:




下圖所指的 Server 是 Hyperion 的伺服務名, 帳號及密碼預設為 admin/password


下圖所指的 Server 是 Oracle 資料庫的相關資訊, 如 step 02: 安裝資料庫 設定時所提供的資料


各個 Services 預設的 port


SQR & Oracle Home 依預設值留空


HTTP Server 一樣選 Apache Tomcat5


在 step03.C: 安裝UI Services , 我選了 Workspace 及 Web Analysis , 所以會有這兩個 Service 相對應的 port


這裡的語言選繁體中文, 格式選台灣


相關 Services 一覽表


Tomcat Apache 安裝的路徑


這是 workspace 所使用的 port


這樣子就可以使用 Hyperion Essbase Server 了. 預設密碼為 admin/password