1.打開 /etc/apache2/httpd.conf 取消掉Include /private/etc/apache2/extra/httpd-ssl.conf 前面的註釋符號#
2. 生成自簽名的CA證書和服務器證書
2.1 生成自簽名的CA證書
cd /etc/apache2
sudo openssl genrsa -des3 -out myownca.key 2048
2.2 申請x509標準簽署證書.(下面的步驟生成了有效期10年的CA證書文件myownca.crt,這個過程會讓你填一些基本信息,國家城市,公司名,網站名等,因爲是自簽署,隨便填就行了)
sudo openssl req -new -x509 -days 3650 -key myownca.key -out myownca.crt
2.3 現在有了CA證書了,就可以用它來爲我們的網站頒發ssl證書了。同製作CA證書一樣,生成server key和證書。 因爲在默認情況下,/private/etc/apache2/extra/httpd-ssl.conf 已經配置好了key的名字和證書的名字,所以下面的步驟中請不要修改生成的key文件的名字,如果修改請把在extra/httpd-ssl.conf中相應的文件路徑和名字也修改
sudo openssl genrsa -des3 -out server.key 2048
2.4 生成了密鑰server.key後,根據它生成csr證書文件
運行下面命令,會讓你填寫一些基本信息,這裏面要注意了Common Name的值要和你的域名一致,否則後面客戶端瀏覽器驗證域名不正確通不過的。我填寫的是192.168.x.xxx, 因此如果你的主機的局域網ip變了的話,就需要重新頒發下證書了。所以建議直接在路由或交換上把你的主機設置爲固定ip.
sudo openssl req -new -key server.key -out server.csr
2.5下面就用CA證書來簽署服務器證書了:
sudo openssl x509 -req -in server.csr -out server.crt -sha1 -CA myownca.crt -CAkey myownca.key -CAcreateserial -days 3650
3 部署到Apache
3.1 在生成server.key的過程中,可能對這個文件設置了密碼,如果直接部署,那麼以後啓動apache的時候都要輸入這個密碼,但是一般我們都開機自動啓動apache,手動啓動多麻煩,可以把這個文件轉換一下,省去輸入密碼步驟:
sudo cp server.key server.key.insecure
sudo openssl rsa -in server.key.insecure -out server.key
3.2 重啓apache服務器
sudo apachectl restart
這樣 https://localhost/ 這樣就可以訪問了(會報證書警告)。 如果用 https://localhost:443 會被自動跳轉到 https://localhost
如果在手機上的safari訪問我們的服務器 https://192.168.x.xxx,會有一個框跳出來‘Cann't Verify Server Identify’,此時一定要點cancel。否則safari就會把這個網站加入到一個ssl異常列表,即便是你的ssl證書有問題,下一次你訪問這個站點,safari也不會發出警告,只有General->Reset-Reset All settings來重置IpHone了。。
因爲這裏CA證書使我們自己創建的,在手機裏面沒有我們的根證書,用手機safari還是不能訪問,需要通過郵件把該根證書myownca.crt發送到測試手機上,測試手機必須通過iPhone自帶的Mail客戶端接收該郵件並點擊該證書myownca.crt進行安裝。安裝或者刪除證書時提示輸入的密碼爲手機解鎖密碼。
4. Export adhoc 版的ipa
創建Adhoc Discribution Provision Profile,並勾選相應的手機udid。然後在Xcode導出ipa時勾選Save for Enterprise Distribution並填寫如下信息
Application URL:https://192.168.x.xx/xx/xx.ipa
Title: XXXX
根據目錄裏的文件自動創建adhoc app下載列表的php代碼:
記得替換192.168.x.xx爲你自己的ip:
<html>
<head>
<style type="text/css">
html,body {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
font-family: Helvetica;
border: 0px solid red;
}
h1 {
margin-top: 20px;
text-align: center;
}
#apps_container {
width: 90%;
margin: 0 auto;
border: 0px solid blue;
}
#apps_container table {
border: 1px solid green;
border-radius: 10px;
width: 100%;
}
#apps_container td {
border-top:1px solid green;
}
.app_title_container {
margin-left: 20px;
margin-right: 2px;
margin-top: 25px;
margin-bottom: 25px;
line-height: 30px;
font-size: 30px;
font-weight: bold;
}
.app_install_button {
margin-left: 2px;
margin-right: 20px;
margin-top: 25px;
margin-bottom: 25px;
text-align: right;
line-height: 30px;
font-size: 30px;
}
</style>
</head>
<body>
<h1>Adhoc applications</h1>
<div id="apps_container">
<table cellspacing="0">
<?php
function getFileList( $dir )
{
$fileArray = array();
if( is_dir($dir) )
{
$handle = opendir($dir);
if( $handle )
{
while( ($file = readdir($handle)) )
{
if( $file != '.' && $file != '..' && $file != ".DS_Store")
{
array_push($fileArray, $file);
}
}
closedir( $handle );
}
}
return $fileArray;
}
$fileArray = getFileList(".");
$firstRow = true;
for ($i=0; $i < count($fileArray); $i++)
{
$fileName = $fileArray[$i];
if (stristr($fileName, ".plist"))
{
$extraStyle = "";
if ($firstRow) {
$extraStyle = ' style="border-width:0;" ';
$firstRow = false;
}
$install_link = '<a href="itms-services://?action=download-manifest&url=https://192.168.x.xx/ios/' . $fileName . '">';
$install_link = $install_link . "Install APP" . "</a>";
// Find a .plist file.
$appName = str_ireplace(".plist", ".ipa", $fileName);
echo "<tr>";
echo " <td " . $extraStyle . ">";
echo " <div class='app_title_container'>" . $appName . "</div>";
echo " </td>";
echo " <td " . $extraStyle . ">";
echo " <div class='app_install_button'>" . $install_link . "</div>";
echo " </td>";
echo "</tr>";
}
}
?>
</table>
</div>
</body>
</html>