Thursday, 8 December 2011

用VirtualBox虚拟64位RedHat(linux)如何与宿主windows共享数据

用VirtualBox虚拟64位RedHat(linux)如何与宿主windows共享数据

0人收藏此文章, 收藏此文章 发表于3个月前 , 已有114次阅读 共0个评论 0人收藏此文章
因为要在虚拟机上安装Oracle数据库,而我的U盘只有可怜的1G--四年前的。好了废话不多说了。
1、设置数据空间
点击设置
选择 数据空间-> 添加固定分配。在 数据空间位置导入您要共享的文件夹;设置 数据空间名称(不要忘了点选 固定分配哦)。
2、安装VirtualBox上的增强功能。
 点击上面的按钮” 设备“,选择“ 安装增强功能”。
好了,如果出现上面的图示。或者df 里 有了这个光盘。说明你刚完成增强功能光盘的挂载。
进入(cd /media/VBOXADDITIONS_4.1.2_73507/ )/media/VBOXADDITIONS_4.1.2_73507/目录。
霹雳扒拉 输入 sudo sh ./VBoxLinuxAdditions.run 好了“Enter”。

3、完了吗。。NO ,最后一步啦。。
首先,确定你是root用户。(嘿嘿)
在终端中输入: mkdir /mnt/share #share 是你决定在linux中的目录名
mount -t vboxsf youname /mnt/share (youname是你给共享文件夹的命名)#就是数据空间的名称啦
再在输入: cd /mnt/share
是不是已经好了,试试看 !
什么??你要用VirtualBox安装的是Windows虚拟机。。。。。。。。。
那么看下这个《如何安装virtualbox虚拟机的增强功能》 http://wo.115.com/?ct=detail&bid=8535944&id=29150

Wednesday, 7 December 2011

Linux OPENSSL服務器

Linux OPENSSL服務器
本文出自:http://www.swm.com.cn 作者:張雲帆 (2001-11-06 09:00:01)

隨著計算機網絡技術的發展,方便快捷的互連網使人們漸漸習慣了從Web頁上收發E-mail、購物和
交易,這時Web頁面上需要傳輸重要或敏感的數據,例如用戶的銀行帳戶、密碼等,所以網絡安全
就成為現代計算機網絡應用急需解決的問題。

現行網上銀行和電子商務等大型的網上交易系統普遍採用HTTP和SSL相結合的方式。服務器端採用
支持SSL的Web服務器,用戶端採用支持SSL的瀏覽器實現安全通信。
SSL是Secure Socket Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸。
Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準,目前已有3.0版本。SSL採用公
開密鑰技術。其目標是保証兩個應用間通信的保密性和可靠性,可在服務器端和用戶端同時實現支
持。目前,利用公開密鑰技術的SSL協議,已成為Internet上保密通訊的工業標準。本文著重在
SSL協議和SSL程序設計兩方面談談作者對SSL的理解。

SSL協議初步介紹
安全套接層協議能使用戶/服務器應用之間的通信不被攻擊者竊聽,並且始終對服務器進行認証,
還可選擇對用戶進行認証。SSL協議要求建立在可靠的傳輸層協議(TCP)之上。SSL協議的優勢在
它是與應用層協議獨立無關的,高層的應用層協議(例如:HTTP,FTP,TELNET等)能透明地建立
SSL協議之上。SSL協議在應用層協議通信之前就已經完成加密算法、通信密鑰的協商及服務器認証
工作。在此之應用層協議所傳送的數據都會被加密,從而保証通信的私密性。
通過以上敘述,SSL協議提供的安全信道有以下三個特性:
1.數據的保密性
信息加密就是把明碼的輸入文件用加密算法轉換成加密的文件以實現數據的保密。加密的過程需要
用到密匙來加密數據然再解密。沒有了密鑰,就無法解開加密的數據。數據加密之,只有密匙
要用一個安全的方法傳送。加密過的數據可以公開地傳送。
2.數據的一致性
加密也能保証數據的一致性。例如:消息驗証碼(MAC),能夠校驗用戶提供的加密信息,接收者可
以用MAC來校驗加密數據,保証數據在傳輸過程中沒有被篡改過。
3.安全驗証
加密的另外一個用途是用來作為個人的標識,用戶的密匙可以作為他的安全驗証的標識。
SSL是利用公開密鑰的加密技術(RSA)來作為用戶端與服務器端在傳送機密資料時的加密通訊協定。
目前,大部分的Web 服務器及瀏覽器都廣泛支持SSL 技術。當瀏覽器試圖連接一個具有SSL認証加
密的服務器時,就會喚醒一個SSL會話,瀏覽器檢查認証,必須具備下面三個條件:
1)有一個權威機構發放証書,當然可以創建自我簽訂的証書(x509 結構)。
2)証書不能過期。
3)証書是屬它所連接的服務器的。
只有全部具備了這三個條件,瀏覽器才能成功完成認証。通過這三個條件,用戶能確認其瀏覽器連接
到正確的服務器,而不是連接到一些想盜取用戶密碼等重要信息的虛假的服務器上。
在當今的電子商務中還有一項被廣泛使用的安全協議是SET協議。SET(Secure Electronic Transaction,
安全電子交易)協議是由VISA和MasterCard兩大信用卡公司1997年5月聯合推出的規范。SET能在電
子交易環節上提供更大的信任度、更完整的交易信息、更高的安全性和更少受欺詐的可能性。SET交
易分三個階段進行:用戶向商家購物並確定支付;商家與銀行核實;銀行向商家支付貨款。每個階段都
涉及到RSA對數據加密,以及RSA數字簽名。使用SET協議,在一次交易中,要完成多次加密與解密操作,
故有很高的安全性,但SET協議比SSL協議復雜,商家和銀行都需要改造系統以實現互操作。
在Linux 下,比較流行支持SSL認証的是OpenSSL服務器。OpenSSL項目是一個合作的項目,開發一個
健壯的、商業等級的、完整的開放源代碼的工具包,用強大的加密算法來實現安全的Socket層
(Secure Sockets Layer,SSL v2/v3)和傳輸層的安全性(Transport Layer Security,TLS v1)。
這個項目是由全世界的志願者管理和開發OpenSSL工具包和相關文檔。
如何在Linux下配置OpenSSL服務器,首先從OpenSSL的主頁(http://www.openssl.org/)上下載
openssl-version.tar.gz軟件包來編譯安裝,與Apache服務器配合可以建立支持SSL的Web服務器,
並可以使用自我簽訂的証書做認証,關如何編譯、安裝OpenSSL服務器,可以參考一下OpenSSL HOWTO
文檔。

SSL 程序設計初步介紹
SSL 通訊模型為標準的C/S 結構,除了在 TCP 層之上進行傳輸之外,與一般的通訊沒有什明顯的區
別。在這裡,我們主要介紹如何使用OpenSSL進行安全通訊的程序設計。關OpenSSL 的一些詳細的信
息請參考OpenSSL的官方主頁 http://www.openssl.org。
在使用OpenSSL前,必須先對OpenSSL 進行初始化,以下的三個函數任選其一:
SSL_library_init(void);
OpenSSL_add_ssl_algorithms();
SSLeay_add_ssl_algorithms();
事實上 面的兩個函數只是第一個函數的宏。
如果要使用OpenSSL的出錯信息,使用SSL_load_error_strings (void)進行錯誤信息的初始化。以
可以使用void ERR_print_errors_fp(FILE *fp) 打印SSL的錯誤信息。
一次SSL連接會話一般要先申請一個SSL 環境,基本的過程是:
1. SSL_METHOD* meth = TLSv1_client_method(); 創建本次會話連接所使用的協議,如果是客戶端可
以使用
SSL_METHOD* TLSv1_client_method(void); TLSv1.0 協議
SSL_METHOD* SSLv2_client_method(void); SSLv2 協議
SSL_METHOD* SSLv3_client_method(void); SSLv3 協議
SSL_METHOD* SSLv23_client_method(void); SSLv2/v3 協議
服務器同樣需要創建本次會話所使用的協議:
SSL_METHOD *TLSv1_server_method(void);
SSL_METHOD *SSLv2_server_method(void);
SSL_METHOD *SSLv3_server_method(void);
SSL_METHOD *SSLv23_server_method(void);
需要注意的是客戶端和服務器需要使用相同的協議。
2.申請SSL會話的環境 CTX,使用不同的協議進行會話,其環境也是不同的。申請SSL會話環
境的OpenSSL函數是
SSLK_CTX* SSL_CTX_new (SSL_METHOD*); 參數就是前面我們申請的 SSL通訊方式。返回當前
的SSL 連接環境的指針。
然根據自己的需要設置CTX的屬性,典型的是設置SSL 握手階段証書的驗証方式和加載自己
的証書。
void SSL_CTX_set_verify (SSL_CTX* , int , int* (int, X509_STORE_CTX*) )
設置証書驗証的方式。
第一個參數是當前的CTX 指針,第二個是驗証方式,如果是要驗証對方的話,就使用
SSL_VERIFY_PEER。不需要的話,使用SSL_VERIFY_NONE.一般情況下,客戶端需要驗証對方,而
服務器不需要。第三個參數是處理驗証的回調函數,如果沒有特殊的需要,使用空指針就可以了。
void SSL_CTX_load_verify_locations(SSL_CTX*, const char* , const char*);
加載証書;
第一個參數同上,參數二是証書文件的名稱,參數三是証書文件的路徑;
int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);
加載本地的証書;type 指明証書文件的結構類型;失敗返回-1
int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
加載自己的私鑰;type 參數指明私鑰文件的結構類型;失敗返回-1
加載了証書和文件之,就可以驗証私鑰和証書是否相符:
BOOl SSL_CTX_check_private_key (SSL_CTX*);
3.既然SSL 使用TCP 協議,當然需要把SSL attach 到已經連接的套接字上了:
SSL* SSL_new (SSL_CTX*); 申請一個SSL 套節字;
int SSL_set_rfd (SSL*); 綁定只讀套接字
int SSL_set_wfd (SSL*); 綁定只寫套接字
int SSL_set_fd ( SSL*); 綁定讀寫套接字
綁定成功返回 1, 失敗返回0;
4. 接下來就是SSL 握手的動作了
int SSL_connect (SSL*); 失敗返回 -1
5. 握手成功之,就可以進行通訊了,使用SSL_read 和SS_write 讀寫SSL 套接字代替傳統的
read 、write
int SSL_read (SSL *ssl, char *buf, int num );
int SSL_write (SSL *ssl, char *buf, int num);
如果是服務器,則使用 SSL_accept 代替傳統的 accept 調用
int SSL_accept(SSL *ssl);
6. 通訊結束,需要釋放前面申請的 SSL資源
int SSL_shutdown(SSL *ssl); 關閉SSL套接字;
void SSL_free (ssl); 釋放SSL套接字;
void SSL_CTX_free (ctx); 釋放SSL環境;
OpenSSL 雖然已經發展到了0.9.96版本,但是它的文檔還很少,甚至連最基本的man 函數手
冊都沒有完成。所以,本文緊緊是講述了使用OpenSSL 進行程序設計的框架。更加詳細的資
料可以參考OpenSSL 的文檔或者 Apache mod_ssl 的文檔。
通過以上的介紹,我想讀者對SSL協議已經有了一定的了解,作者有機會將會繼續給大家介紹
SSL協議的其他方面的內容。

Friday, 2 December 2011

Updated: How to Connect Securely to LDAP using PHP

http://www.novell.com/coolsolutions/tip/5838.html

Updated: How to Connect Securely to LDAP using PHP

Novell Cool Solutions: Tip
By Bryan Thoreson

Digg This - Slashdot This

Updated: 1 Mar 2006

To connect securely to LDAP using PHP,
1. Make sure your PHP install has both the ldap and openssl extensions enabled.
Windows/Linux Procedure
2. Verify the ldap.conf file settings.
a) For Windows, verify that the C:\openldap\sysconf\ldap.conf file exists.
b) For Linux, verify that the /etc/openldap/ldap.conf file exists. If it does not, create it.
c) For both Linux and Windows, the ldap.conf file should contain this line:
TLS_REQCERT     never
3. If you want php to verify the ldap server's ssl certificate with the Certificate Authority that issued the certificate, you need to put the root certificate here:
a. Export the trusted root Certificate. (For details, see Step 1 in How to test LDAP over SSL).
b. Use this command to convert the DER to PEM:
openssl x509 -in RootCert.der -inform DER -out RootCert.pem -outform PEM
c. On Windows you can download openssl binaries from these two sites:
4. Now copy the rootcert.pem to the certs folder:
a. For Linux, /etc/openldap/cert/rootcert.pem
b. For Windows, C:\openldap\sysconf\certs\rootcert.pem
c. For both Linux and Windows, the ldap.conf file should contain this line:
(Linux)  TLS_CACERT /etc/openldap/cert/rootcert.pem
(Windows) TLS_CACERT c:\OpenLDAP\sysconf\certs\rootcert.pem
Netware Procedure
Copy your tree's ROOTCERT.DER file to this location:
SYS:php5/certs.
Connection Code
Here are the snippets of code that should get you connected. Try either example.
Example 1
<?php
// This code uses the START_TLS command

$ldaphost = "ldap://ldap.hostname.something";
$ldapUsername  = "cn=username,o=novell";
$ldapPassword = "password";
 
 
$ds = ldap_connect($ldaphost);
 
if(!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)){
print "Could not set LDAPv3\r\n";
}
else if (!ldap_start_tls($ds)) {
print "Could not start secure TLS connection";
}else {
// now we need to bind to the ldap server
$bth = ldap_bind($ds, $ldapUsername, $ldapPassword) or die("\r\nCould not connect to LDAP server\r\n");
}
?>
Example 2
<?php
// This code goes directly to the 636 SSL port

$ldaphost = "ldaps://ldap.hostname.something";
$ldapUsername  = "cn=username,o=novell";
$ldapPassword = "password";
 
 
$ds = ldap_connect($ldaphost);
 
if(!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)){
print "Could not set LDAPv3\r\n";
}
else {
// now we need to bind to the ldap server
$bth = ldap_bind($ds, $ldapUsername, $ldapPassword) or die("\r\nCould not connect to LDAP server\r\n");
}
?>
If you have any questions you may contact Bryan at thor@umn.edu