Unverified Commit bb3b57c6 authored by honfika's avatar honfika Committed by GitHub

Merge pull request #803 from justcoding121/master

beta
parents 06cb6ee8 cc28b9fc
<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Enum AlternativeNameType
| Titanium Web Proxy </title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="Enum AlternativeNameType
| Titanium Web Proxy ">
<meta name="generator" content="docfx 2.55.0.0">
<link rel="shortcut icon" href="../favicon.ico">
<link rel="stylesheet" href="../styles/docfx.vendor.css">
<link rel="stylesheet" href="../styles/docfx.css">
<link rel="stylesheet" href="../styles/main.css">
<meta property="docfx:navrel" content="">
<meta property="docfx:tocrel" content="toc.html">
<meta property="docfx:rel" content="../">
</head>
<body data-spy="scroll" data-target="#affix" data-offset="120">
<div id="wrapper">
<header>
<nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../logo.svg" alt="">
</a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<form class="navbar-form navbar-right" role="search" id="search">
<div class="form-group">
<input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
</div>
</form>
</div>
</div>
</nav>
<div class="subnav navbar navbar-default">
<div class="container hide-when-search" id="breadcrumb">
<ul class="breadcrumb">
<li></li>
</ul>
</div>
</div>
</header>
<div class="container body-content">
<div id="search-results">
<div class="search-list"></div>
<div class="sr-items">
<p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
</div>
<ul id="pagination"></ul>
</div>
</div>
<div role="main" class="container body-content hide-when-search">
<div class="sidenav hide-when-search">
<a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
<div class="sidetoggle collapse" id="sidetoggle">
<div id="sidetoc"></div>
</div>
</div>
<div class="article row grid-right">
<div class="col-md-10">
<article class="content wrap" id="_content" data-uid="Titanium.Web.Proxy.Network.Certificate.AlternativeNameType">
<h1 id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType" data-uid="Titanium.Web.Proxy.Network.Certificate.AlternativeNameType" class="text-break">Enum AlternativeNameType
</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<h6><strong>Namespace</strong>: <a class="xref" href="Titanium.Web.Proxy.Network.Certificate.html">Titanium.Web.Proxy.Network.Certificate</a></h6>
<h6><strong>Assembly</strong>: Titanium.Web.Proxy.dll</h6>
<h5 id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_syntax">Syntax</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public enum AlternativeNameType</code></pre>
</div>
<h3 id="fields">Fields
</h3>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
<thead>
<tbody>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_DIRECTORY_NAME">XCN_CERT_ALT_NAME_DIRECTORY_NAME</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_DNS_NAME">XCN_CERT_ALT_NAME_DNS_NAME</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_GUID">XCN_CERT_ALT_NAME_GUID</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_IP_ADDRESS">XCN_CERT_ALT_NAME_IP_ADDRESS</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_OTHER_NAME">XCN_CERT_ALT_NAME_OTHER_NAME</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_REGISTERED_ID">XCN_CERT_ALT_NAME_REGISTERED_ID</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_RFC822_NAME">XCN_CERT_ALT_NAME_RFC822_NAME</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_UNKNOWN">XCN_CERT_ALT_NAME_UNKNOWN</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_URL">XCN_CERT_ALT_NAME_URL</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_AlternativeNameType_XCN_CERT_ALT_NAME_USER_PRINCIPLE_NAME">XCN_CERT_ALT_NAME_USER_PRINCIPLE_NAME</td>
<td></td>
</tr>
</tbody>
</thead></thead></table>
</article>
</div>
<div class="hidden-sm col-md-2" role="complementary">
<div class="sideaffix">
<div class="contribution">
<ul class="nav">
<li>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Network_Certificate_AlternativeNameType.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Network.Certificate.AlternativeNameType%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A" class="contribution-link">Improve this Doc</a>
</li>
<li>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Certificates/WinCertificateMaker.cs/#L339" class="contribution-link">View Source</a>
</li>
</ul>
</div>
<nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
<!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
</nav>
</div>
</div>
</div>
</div>
<footer>
<div class="grad-bottom"></div>
<div class="footer">
<div class="container">
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
<span>Generated by <strong>DocFX</strong></span>
</div>
</div>
</footer>
</div>
<script type="text/javascript" src="../styles/docfx.vendor.js"></script>
<script type="text/javascript" src="../styles/docfx.js"></script>
<script type="text/javascript" src="../styles/main.js"></script>
</body>
</html>
<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Enum EncodingType
| Titanium Web Proxy </title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="Enum EncodingType
| Titanium Web Proxy ">
<meta name="generator" content="docfx 2.55.0.0">
<link rel="shortcut icon" href="../favicon.ico">
<link rel="stylesheet" href="../styles/docfx.vendor.css">
<link rel="stylesheet" href="../styles/docfx.css">
<link rel="stylesheet" href="../styles/main.css">
<meta property="docfx:navrel" content="">
<meta property="docfx:tocrel" content="toc.html">
<meta property="docfx:rel" content="../">
</head>
<body data-spy="scroll" data-target="#affix" data-offset="120">
<div id="wrapper">
<header>
<nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../logo.svg" alt="">
</a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<form class="navbar-form navbar-right" role="search" id="search">
<div class="form-group">
<input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
</div>
</form>
</div>
</div>
</nav>
<div class="subnav navbar navbar-default">
<div class="container hide-when-search" id="breadcrumb">
<ul class="breadcrumb">
<li></li>
</ul>
</div>
</div>
</header>
<div class="container body-content">
<div id="search-results">
<div class="search-list"></div>
<div class="sr-items">
<p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
</div>
<ul id="pagination"></ul>
</div>
</div>
<div role="main" class="container body-content hide-when-search">
<div class="sidenav hide-when-search">
<a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
<div class="sidetoggle collapse" id="sidetoggle">
<div id="sidetoc"></div>
</div>
</div>
<div class="article row grid-right">
<div class="col-md-10">
<article class="content wrap" id="_content" data-uid="Titanium.Web.Proxy.Network.Certificate.EncodingType">
<h1 id="Titanium_Web_Proxy_Network_Certificate_EncodingType" data-uid="Titanium.Web.Proxy.Network.Certificate.EncodingType" class="text-break">Enum EncodingType
</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<h6><strong>Namespace</strong>: <a class="xref" href="Titanium.Web.Proxy.Network.Certificate.html">Titanium.Web.Proxy.Network.Certificate</a></h6>
<h6><strong>Assembly</strong>: Titanium.Web.Proxy.dll</h6>
<h5 id="Titanium_Web_Proxy_Network_Certificate_EncodingType_syntax">Syntax</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public enum EncodingType</code></pre>
</div>
<h3 id="fields">Fields
</h3>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
<thead>
<tbody>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_ANY">XCN_CRYPT_STRING_ANY</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_BASE64">XCN_CRYPT_STRING_BASE64</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_BASE64_ANY">XCN_CRYPT_STRING_BASE64_ANY</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_BASE64HEADER">XCN_CRYPT_STRING_BASE64HEADER</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_BASE64REQUESTHEADER">XCN_CRYPT_STRING_BASE64REQUESTHEADER</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_BASE64URI">XCN_CRYPT_STRING_BASE64URI</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_BASE64X509CRLHEADER">XCN_CRYPT_STRING_BASE64X509CRLHEADER</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_BINARY">XCN_CRYPT_STRING_BINARY</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_CHAIN">XCN_CRYPT_STRING_CHAIN</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_ENCODEMASK">XCN_CRYPT_STRING_ENCODEMASK</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_HASHDATA">XCN_CRYPT_STRING_HASHDATA</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_HEX">XCN_CRYPT_STRING_HEX</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_HEX_ANY">XCN_CRYPT_STRING_HEX_ANY</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_HEXADDR">XCN_CRYPT_STRING_HEXADDR</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_HEXASCII">XCN_CRYPT_STRING_HEXASCII</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_HEXASCIIADDR">XCN_CRYPT_STRING_HEXASCIIADDR</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_HEXRAW">XCN_CRYPT_STRING_HEXRAW</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_NOCR">XCN_CRYPT_STRING_NOCR</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_NOCRLF">XCN_CRYPT_STRING_NOCRLF</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_PERCENTESCAPE">XCN_CRYPT_STRING_PERCENTESCAPE</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_STRICT">XCN_CRYPT_STRING_STRICT</td>
<td></td>
</tr>
<tr>
<td id="Titanium_Web_Proxy_Network_Certificate_EncodingType_XCN_CRYPT_STRING_TEXT">XCN_CRYPT_STRING_TEXT</td>
<td></td>
</tr>
</tbody>
</thead></thead></table>
</article>
</div>
<div class="hidden-sm col-md-2" role="complementary">
<div class="sideaffix">
<div class="contribution">
<ul class="nav">
<li>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Network_Certificate_EncodingType.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Network.Certificate.EncodingType%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A" class="contribution-link">Improve this Doc</a>
</li>
<li>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Certificates/WinCertificateMaker.cs/#L313" class="contribution-link">View Source</a>
</li>
</ul>
</div>
<nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
<!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
</nav>
</div>
</div>
</div>
</div>
<footer>
<div class="grad-bottom"></div>
<div class="footer">
<div class="container">
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
<span>Generated by <strong>DocFX</strong></span>
</div>
</div>
</footer>
</div>
<script type="text/javascript" src="../styles/docfx.vendor.js"></script>
<script type="text/javascript" src="../styles/docfx.js"></script>
<script type="text/javascript" src="../styles/main.js"></script>
</body>
</html>
<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Namespace Titanium.Web.Proxy.Network.Certificate
| Titanium Web Proxy </title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="Namespace Titanium.Web.Proxy.Network.Certificate
| Titanium Web Proxy ">
<meta name="generator" content="docfx 2.55.0.0">
<link rel="shortcut icon" href="../favicon.ico">
<link rel="stylesheet" href="../styles/docfx.vendor.css">
<link rel="stylesheet" href="../styles/docfx.css">
<link rel="stylesheet" href="../styles/main.css">
<meta property="docfx:navrel" content="">
<meta property="docfx:tocrel" content="toc.html">
<meta property="docfx:rel" content="../">
</head>
<body data-spy="scroll" data-target="#affix" data-offset="120">
<div id="wrapper">
<header>
<nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../logo.svg" alt="">
</a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<form class="navbar-form navbar-right" role="search" id="search">
<div class="form-group">
<input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
</div>
</form>
</div>
</div>
</nav>
<div class="subnav navbar navbar-default">
<div class="container hide-when-search" id="breadcrumb">
<ul class="breadcrumb">
<li></li>
</ul>
</div>
</div>
</header>
<div class="container body-content">
<div id="search-results">
<div class="search-list"></div>
<div class="sr-items">
<p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
</div>
<ul id="pagination"></ul>
</div>
</div>
<div role="main" class="container body-content hide-when-search">
<div class="sidenav hide-when-search">
<a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
<div class="sidetoggle collapse" id="sidetoggle">
<div id="sidetoc"></div>
</div>
</div>
<div class="article row grid-right">
<div class="col-md-10">
<article class="content wrap" id="_content" data-uid="Titanium.Web.Proxy.Network.Certificate">
<h1 id="Titanium_Web_Proxy_Network_Certificate" data-uid="Titanium.Web.Proxy.Network.Certificate" class="text-break">Namespace Titanium.Web.Proxy.Network.Certificate
</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="enums">Enums
</h3>
<h4><a class="xref" href="Titanium.Web.Proxy.Network.Certificate.AlternativeNameType.html">AlternativeNameType</a></h4>
<section></section>
<h4><a class="xref" href="Titanium.Web.Proxy.Network.Certificate.EncodingType.html">EncodingType</a></h4>
<section></section>
</article>
</div>
<div class="hidden-sm col-md-2" role="complementary">
<div class="sideaffix">
<div class="contribution">
<ul class="nav">
</ul>
</div>
<nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
<!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
</nav>
</div>
</div>
</div>
</div>
<footer>
<div class="grad-bottom"></div>
<div class="footer">
<div class="container">
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
<span>Generated by <strong>DocFX</strong></span>
</div>
</div>
</footer>
</div>
<script type="text/javascript" src="../styles/docfx.vendor.js"></script>
<script type="text/javascript" src="../styles/docfx.js"></script>
<script type="text/javascript" src="../styles/main.js"></script>
</body>
</html>
......@@ -240,6 +240,19 @@
</li>
</ul>
</li>
<li>
<span class="expand-stub"></span>
<a href="Titanium.Web.Proxy.Network.Certificate.html" name="" title="Titanium.Web.Proxy.Network.Certificate">Titanium.Web.Proxy.Network.Certificate</a>
<ul class="nav level2">
<li>
<a href="Titanium.Web.Proxy.Network.Certificate.AlternativeNameType.html" name="" title="AlternativeNameType">AlternativeNameType</a>
</li>
<li>
<a href="Titanium.Web.Proxy.Network.Certificate.EncodingType.html" name="" title="EncodingType">EncodingType</a>
</li>
</ul>
</li>
<li>
<span class="expand-stub"></span>
<a href="Titanium.Web.Proxy.StreamExtended.html" name="" title="Titanium.Web.Proxy.StreamExtended">Titanium.Web.Proxy.StreamExtended</a>
......
......@@ -274,6 +274,21 @@
"title": "Class TransparentProxyEndPoint | Titanium Web Proxy",
"keywords": "Class TransparentProxyEndPoint A proxy end point client is not aware of. Useful when requests are redirected to this proxy end point through port forwarding via router. Inheritance Object ProxyEndPoint TransparentBaseProxyEndPoint TransparentProxyEndPoint Inherited Members ProxyEndPoint.IpAddress ProxyEndPoint.Port ProxyEndPoint.DecryptSsl ProxyEndPoint.GenericCertificate Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : Titanium.Web.Proxy.Models Assembly : Titanium.Web.Proxy.dll Syntax public class TransparentProxyEndPoint : TransparentBaseProxyEndPoint Constructors | Improve this Doc View Source TransparentProxyEndPoint(IPAddress, Int32, Boolean) Initialize a new instance. Declaration public TransparentProxyEndPoint(IPAddress ipAddress, int port, bool decryptSsl = true) Parameters Type Name Description IPAddress ipAddress Listening Ip address. Int32 port Listening port. Boolean decryptSsl Should we decrypt ssl? Properties | Improve this Doc View Source GenericCertificateName Name of the Certificate need to be sent (same as the hostname we want to proxy). This is valid only when UseServerNameIndication is set to false. Declaration public override string GenericCertificateName { get; set; } Property Value Type Description String Overrides TransparentBaseProxyEndPoint.GenericCertificateName Events | Improve this Doc View Source BeforeSslAuthenticate Before Ssl authentication this event is fired. Declaration public event AsyncEventHandler<BeforeSslAuthenticateEventArgs> BeforeSslAuthenticate Event Type Type Description AsyncEventHandler < BeforeSslAuthenticateEventArgs >"
},
"api/Titanium.Web.Proxy.Network.Certificate.AlternativeNameType.html": {
"href": "api/Titanium.Web.Proxy.Network.Certificate.AlternativeNameType.html",
"title": "Enum AlternativeNameType | Titanium Web Proxy",
"keywords": "Enum AlternativeNameType Namespace : Titanium.Web.Proxy.Network.Certificate Assembly : Titanium.Web.Proxy.dll Syntax public enum AlternativeNameType Fields Name Description XCN_CERT_ALT_NAME_DIRECTORY_NAME XCN_CERT_ALT_NAME_DNS_NAME XCN_CERT_ALT_NAME_GUID XCN_CERT_ALT_NAME_IP_ADDRESS XCN_CERT_ALT_NAME_OTHER_NAME XCN_CERT_ALT_NAME_REGISTERED_ID XCN_CERT_ALT_NAME_RFC822_NAME XCN_CERT_ALT_NAME_UNKNOWN XCN_CERT_ALT_NAME_URL XCN_CERT_ALT_NAME_USER_PRINCIPLE_NAME"
},
"api/Titanium.Web.Proxy.Network.Certificate.EncodingType.html": {
"href": "api/Titanium.Web.Proxy.Network.Certificate.EncodingType.html",
"title": "Enum EncodingType | Titanium Web Proxy",
"keywords": "Enum EncodingType Namespace : Titanium.Web.Proxy.Network.Certificate Assembly : Titanium.Web.Proxy.dll Syntax public enum EncodingType Fields Name Description XCN_CRYPT_STRING_ANY XCN_CRYPT_STRING_BASE64 XCN_CRYPT_STRING_BASE64_ANY XCN_CRYPT_STRING_BASE64HEADER XCN_CRYPT_STRING_BASE64REQUESTHEADER XCN_CRYPT_STRING_BASE64URI XCN_CRYPT_STRING_BASE64X509CRLHEADER XCN_CRYPT_STRING_BINARY XCN_CRYPT_STRING_CHAIN XCN_CRYPT_STRING_ENCODEMASK XCN_CRYPT_STRING_HASHDATA XCN_CRYPT_STRING_HEX XCN_CRYPT_STRING_HEX_ANY XCN_CRYPT_STRING_HEXADDR XCN_CRYPT_STRING_HEXASCII XCN_CRYPT_STRING_HEXASCIIADDR XCN_CRYPT_STRING_HEXRAW XCN_CRYPT_STRING_NOCR XCN_CRYPT_STRING_NOCRLF XCN_CRYPT_STRING_PERCENTESCAPE XCN_CRYPT_STRING_STRICT XCN_CRYPT_STRING_TEXT"
},
"api/Titanium.Web.Proxy.Network.Certificate.html": {
"href": "api/Titanium.Web.Proxy.Network.Certificate.html",
"title": "Namespace Titanium.Web.Proxy.Network.Certificate | Titanium Web Proxy",
"keywords": "Namespace Titanium.Web.Proxy.Network.Certificate Enums AlternativeNameType EncodingType"
},
"api/Titanium.Web.Proxy.Network.CertificateEngine.html": {
"href": "api/Titanium.Web.Proxy.Network.CertificateEngine.html",
"title": "Enum CertificateEngine | Titanium Web Proxy",
......
This diff is collapsed.
using System;
using System.IO;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Pkcs;
......@@ -99,7 +100,13 @@ namespace Titanium.Web.Proxy.Network.Certificate
if (hostName != null)
{
// add subject alternative names
var subjectAlternativeNames = new Asn1Encodable[] { new GeneralName(GeneralName.DnsName, hostName) };
var nameType = GeneralName.DnsName;
if (IPAddress.TryParse(hostName, out _))
{
nameType = GeneralName.IPAddress;
}
var subjectAlternativeNames = new Asn1Encodable[] { new GeneralName(nameType, hostName) };
var subjectAlternativeNamesExtension = new DerSequence(subjectAlternativeNames);
certificateGenerator.AddExtension(X509Extensions.SubjectAlternativeName.Id, false,
......
using System;
using System.Net;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
......@@ -220,11 +221,20 @@ namespace Titanium.Web.Proxy.Network.Certificate
var altNameCollection = Activator.CreateInstance(typeAltNamesCollection);
var extNames = Activator.CreateInstance(typeExtNames);
var altDnsNames = Activator.CreateInstance(typeCAlternativeName);
typeValue = new object[] { 3, subject };
typeCAlternativeName.InvokeMember("InitializeFromString", BindingFlags.InvokeMethod, null, altDnsNames,
typeValue);
var altDnsNames = Activator.CreateInstance(typeCAlternativeName);
IPAddress ip;
if (IPAddress.TryParse(subject, out ip))
{
String ipBase64 = Convert.ToBase64String(ip.GetAddressBytes());
typeValue = new object[] { AlternativeNameType.XCN_CERT_ALT_NAME_IP_ADDRESS, EncodingType.XCN_CRYPT_STRING_BASE64, ipBase64 };
typeCAlternativeName.InvokeMember("InitializeFromRawData", BindingFlags.InvokeMethod, null, altDnsNames, typeValue);
}
else
{
typeValue = new object[] { 3, subject };//3==DNS, 8==IP ADDR
typeCAlternativeName.InvokeMember("InitializeFromString", BindingFlags.InvokeMethod, null, altDnsNames, typeValue);
}
typeValue = new[] { altDnsNames };
typeAltNamesCollection.InvokeMember("Add", BindingFlags.InvokeMethod, null, altNameCollection,
......@@ -298,5 +308,45 @@ namespace Titanium.Web.Proxy.Network.Certificate
return new X509Certificate2(Convert.FromBase64String(empty), string.Empty, X509KeyStorageFlags.Exportable);
}
}
public enum EncodingType
{
XCN_CRYPT_STRING_ANY = 7,
XCN_CRYPT_STRING_BASE64 = 1,
XCN_CRYPT_STRING_BASE64_ANY = 6,
XCN_CRYPT_STRING_BASE64HEADER = 0,
XCN_CRYPT_STRING_BASE64REQUESTHEADER = 3,
XCN_CRYPT_STRING_BASE64URI = 13,
XCN_CRYPT_STRING_BASE64X509CRLHEADER = 9,
XCN_CRYPT_STRING_BINARY = 2,
XCN_CRYPT_STRING_CHAIN = 0x100,
XCN_CRYPT_STRING_ENCODEMASK = 0xff,
XCN_CRYPT_STRING_HASHDATA = 0x10000000,
XCN_CRYPT_STRING_HEX = 4,
XCN_CRYPT_STRING_HEX_ANY = 8,
XCN_CRYPT_STRING_HEXADDR = 10,
XCN_CRYPT_STRING_HEXASCII = 5,
XCN_CRYPT_STRING_HEXASCIIADDR = 11,
XCN_CRYPT_STRING_HEXRAW = 12,
XCN_CRYPT_STRING_NOCR = -2147483648,
XCN_CRYPT_STRING_NOCRLF = 0x40000000,
XCN_CRYPT_STRING_PERCENTESCAPE = 0x8000000,
XCN_CRYPT_STRING_STRICT = 0x20000000,
XCN_CRYPT_STRING_TEXT = 0x200
}
public enum AlternativeNameType
{
XCN_CERT_ALT_NAME_DIRECTORY_NAME = 5,
XCN_CERT_ALT_NAME_DNS_NAME = 3,
XCN_CERT_ALT_NAME_GUID = 10,
XCN_CERT_ALT_NAME_IP_ADDRESS = 8,
XCN_CERT_ALT_NAME_OTHER_NAME = 1,
XCN_CERT_ALT_NAME_REGISTERED_ID = 9,
XCN_CERT_ALT_NAME_RFC822_NAME = 2,
XCN_CERT_ALT_NAME_UNKNOWN = 0,
XCN_CERT_ALT_NAME_URL = 7,
XCN_CERT_ALT_NAME_USER_PRINCIPLE_NAME = 11
}
}
......@@ -35,7 +35,7 @@ namespace Titanium.Web.Proxy
var clientStream = new HttpClientStream(clientConnection, clientConnection.GetStream(), BufferPool, cancellationToken);
Task<TcpServerConnection>? prefetchConnectionTask = null;
Task<TcpServerConnection?>? prefetchConnectionTask = null;
bool closeServerConnection = false;
try
......@@ -145,13 +145,16 @@ namespace Titanium.Web.Proxy
// todo: this is a hack, because Titanium does not support HTTP protocol changing currently
var connection = await tcpConnectionFactory.GetServerConnection(this, connectArgs,
true, SslExtensions.Http2ProtocolAsList,
true, cancellationToken);
true, true, cancellationToken);
http2Supported = connection.NegotiatedApplicationProtocol ==
SslApplicationProtocol.Http2;
if (connection != null)
{
http2Supported = connection.NegotiatedApplicationProtocol ==
SslApplicationProtocol.Http2;
// release connection back to pool instead of closing when connection pool is enabled.
await tcpConnectionFactory.Release(connection, true);
// release connection back to pool instead of closing when connection pool is enabled.
await tcpConnectionFactory.Release(connection, true);
}
}
catch (Exception)
{
......@@ -162,22 +165,11 @@ namespace Titanium.Web.Proxy
if (EnableTcpServerConnectionPrefetch)
{
IPAddress[]? ipAddresses = null;
try
{
// make sure the host can be resolved before creating the prefetch task
ipAddresses = await Dns.GetHostAddressesAsync(connectArgs.HttpClient.Request.RequestUri.Host);
}
catch (SocketException) { }
if (ipAddresses != null && ipAddresses.Length > 0)
{
// don't pass cancellation token here
// it could cause floating server connections when client exits
prefetchConnectionTask = tcpConnectionFactory.GetServerConnection(this, connectArgs,
true, null, false,
CancellationToken.None);
}
// don't pass cancellation token here
// it could cause floating server connections when client exits
prefetchConnectionTask = tcpConnectionFactory.GetServerConnection(this, connectArgs,
true, null, false, true,
CancellationToken.None);
}
string connectHostname = requestLine.RequestUri.GetString();
......@@ -272,9 +264,9 @@ namespace Titanium.Web.Proxy
// create new connection to server.
// If we detected that client tunnel CONNECTs without SSL by checking for empty client hello then
// this connection should not be HTTPS.
var connection = await tcpConnectionFactory.GetServerConnection(this, connectArgs,
var connection = (await tcpConnectionFactory.GetServerConnection(this, connectArgs,
true, null,
true, cancellationToken);
true, false, cancellationToken))!;
try
{
......@@ -349,9 +341,9 @@ namespace Titanium.Web.Proxy
throw new Exception($"HTTP/2 Protocol violation. Empty string expected, '{line}' received");
}
var connection = await tcpConnectionFactory.GetServerConnection(this, connectArgs,
var connection = (await tcpConnectionFactory.GetServerConnection(this, connectArgs,
true, SslExtensions.Http2ProtocolAsList,
true, cancellationToken);
true, false, cancellationToken))!;
try
{
#if NETSTANDARD2_1
......
......@@ -154,7 +154,7 @@ namespace Titanium.Web.Proxy.Network.Tcp
applicationProtocols = new List<SslApplicationProtocol> { applicationProtocol };
}
return GetServerConnection(proxyServer, session, isConnect, applicationProtocols, noCache, cancellationToken);
return GetServerConnection(proxyServer, session, isConnect, applicationProtocols, noCache, false, cancellationToken)!;
}
/// <summary>
......@@ -165,10 +165,11 @@ namespace Titanium.Web.Proxy.Network.Tcp
/// <param name="isConnect">Is this a CONNECT request.</param>
/// <param name="applicationProtocols"></param>
/// <param name="noCache">if set to <c>true</c> [no cache].</param>
/// <param name="prefetch">if set to <c>true</c> [prefetch].</param>
/// <param name="cancellationToken">The cancellation token for this async task.</param>
/// <returns></returns>
internal async Task<TcpServerConnection> GetServerConnection(ProxyServer proxyServer, SessionEventArgsBase session, bool isConnect,
List<SslApplicationProtocol>? applicationProtocols, bool noCache, CancellationToken cancellationToken)
internal async Task<TcpServerConnection?> GetServerConnection(ProxyServer proxyServer, SessionEventArgsBase session, bool isConnect,
List<SslApplicationProtocol>? applicationProtocols, bool noCache, bool prefetch, CancellationToken cancellationToken)
{
var customUpStreamProxy = session.CustomUpStreamProxy;
......@@ -208,7 +209,7 @@ namespace Titanium.Web.Proxy.Network.Tcp
var upStreamEndPoint = session.HttpClient.UpStreamEndPoint ?? proxyServer.UpStreamEndPoint;
var upStreamProxy = customUpStreamProxy ?? (isHttps ? proxyServer.UpStreamHttpsProxy : proxyServer.UpStreamHttpProxy);
return await GetServerConnection(proxyServer, host, port, session.HttpClient.Request.HttpVersion, isHttps,
applicationProtocols, isConnect, session, upStreamEndPoint, upStreamProxy, noCache, cancellationToken);
applicationProtocols, isConnect, session, upStreamEndPoint, upStreamProxy, noCache, prefetch, cancellationToken);
}
/// <summary>
......@@ -225,12 +226,13 @@ namespace Titanium.Web.Proxy.Network.Tcp
/// <param name="upStreamEndPoint">The local upstream endpoint to make request via.</param>
/// <param name="externalProxy">The external proxy to make request via.</param>
/// <param name="noCache">Not from cache/create new connection.</param>
/// <param name="prefetch">if set to <c>true</c> [prefetch].</param>
/// <param name="cancellationToken">The cancellation token for this async task.</param>
/// <returns></returns>
internal async Task<TcpServerConnection> GetServerConnection(ProxyServer proxyServer, string remoteHostName, int remotePort,
internal async Task<TcpServerConnection?> GetServerConnection(ProxyServer proxyServer, string remoteHostName, int remotePort,
Version httpVersion, bool isHttps, List<SslApplicationProtocol>? applicationProtocols, bool isConnect,
SessionEventArgsBase sessionArgs, IPEndPoint? upStreamEndPoint, IExternalProxy? externalProxy,
bool noCache, CancellationToken cancellationToken)
bool noCache, bool prefetch, CancellationToken cancellationToken)
{
var sslProtocol = sessionArgs.ClientConnection.SslProtocol;
var cacheKey = GetConnectionCacheKey(remoteHostName, remotePort,
......@@ -259,7 +261,7 @@ namespace Titanium.Web.Proxy.Network.Tcp
}
var connection = await createServerConnection(remoteHostName, remotePort, httpVersion, isHttps, sslProtocol,
applicationProtocols, isConnect, proxyServer, sessionArgs, upStreamEndPoint, externalProxy, cacheKey, cancellationToken);
applicationProtocols, isConnect, proxyServer, sessionArgs, upStreamEndPoint, externalProxy, cacheKey, prefetch, cancellationToken);
return connection;
}
......@@ -279,12 +281,13 @@ namespace Titanium.Web.Proxy.Network.Tcp
/// <param name="upStreamEndPoint">The local upstream endpoint to make request via.</param>
/// <param name="externalProxy">The external proxy to make request via.</param>
/// <param name="cacheKey">The connection cache key</param>
/// <param name="prefetch">if set to <c>true</c> [prefetch].</param>
/// <param name="cancellationToken">The cancellation token for this async task.</param>
/// <returns></returns>
private async Task<TcpServerConnection> createServerConnection(string remoteHostName, int remotePort,
private async Task<TcpServerConnection?> createServerConnection(string remoteHostName, int remotePort,
Version httpVersion, bool isHttps, SslProtocols sslProtocol, List<SslApplicationProtocol>? applicationProtocols, bool isConnect,
ProxyServer proxyServer, SessionEventArgsBase sessionArgs, IPEndPoint? upStreamEndPoint, IExternalProxy? externalProxy, string cacheKey,
CancellationToken cancellationToken)
bool prefetch, CancellationToken cancellationToken)
{
// deny connection to proxy end points to avoid infinite connection loop.
if (Server.ProxyEndPoints.Any(x => x.Port == remotePort)
......@@ -350,6 +353,11 @@ retry:
var ipAddresses = await Dns.GetHostAddressesAsync(hostname);
if (ipAddresses == null || ipAddresses.Length == 0)
{
if (prefetch)
{
return null;
}
throw new Exception($"Could not resolve the hostname {hostname}");
}
......@@ -375,7 +383,7 @@ retry:
? ProxyTypes.Socks4
: ProxyTypes.Socks5;
proxySocket.ProxyEndPoint = new IPEndPoint(ipAddresses[0], port);
proxySocket.ProxyEndPoint = new IPEndPoint(ipAddress, port);
if (!string.IsNullOrEmpty(externalProxy.UserName) && externalProxy.Password != null)
{
proxySocket.ProxyUser = externalProxy.UserName;
......@@ -486,10 +494,15 @@ retry:
{
sessionArgs.CustomUpStreamProxyUsed = newUpstreamProxy;
sessionArgs.TimeLine["Retrying Upstream Proxy Connection"] = DateTime.UtcNow;
return await createServerConnection(remoteHostName, remotePort, httpVersion, isHttps, sslProtocol, applicationProtocols, isConnect, proxyServer, sessionArgs, upStreamEndPoint, externalProxy, cacheKey, cancellationToken);
return await createServerConnection(remoteHostName, remotePort, httpVersion, isHttps, sslProtocol, applicationProtocols, isConnect, proxyServer, sessionArgs, upStreamEndPoint, externalProxy, cacheKey, prefetch, cancellationToken);
}
}
if (prefetch)
{
return null;
}
throw new Exception($"Could not establish connection to {hostname}", lastException);
}
......@@ -502,7 +515,7 @@ retry:
stream = new HttpServerStream(new NetworkStream(tcpServerSocket, true), proxyServer.BufferPool, cancellationToken);
if ((externalProxy != null && externalProxy.ProxyType == ExternalProxyType.Http) && (isConnect || isHttps))
if (externalProxy != null && externalProxy.ProxyType == ExternalProxyType.Http && (isConnect || isHttps))
{
var authority = $"{remoteHostName}:{remotePort}".GetByteString();
var connectRequest = new ConnectRequest(authority)
......@@ -658,7 +671,7 @@ retry:
}
}
internal async Task Release(Task<TcpServerConnection>? connectionCreateTask, bool closeServerConnection)
internal async Task Release(Task<TcpServerConnection?>? connectionCreateTask, bool closeServerConnection)
{
if (connectionCreateTask == null)
{
......
......@@ -35,7 +35,7 @@ namespace Titanium.Web.Proxy
/// <param name="isHttps">Is HTTPS</param>
private async Task handleHttpSessionRequest(ProxyEndPoint endPoint, HttpClientStream clientStream,
CancellationTokenSource cancellationTokenSource, TunnelConnectSessionEventArgs? connectArgs = null,
Task<TcpServerConnection>? prefetchConnectionTask = null, bool isHttps = false)
Task<TcpServerConnection?>? prefetchConnectionTask = null, bool isHttps = false)
{
var connectRequest = connectArgs?.HttpClient.ConnectRequest;
......
......@@ -91,10 +91,10 @@ namespace Titanium.Web.Proxy
else
{
var sessionArgs = new SessionEventArgs(this, endPoint, clientStream, null, cancellationTokenSource);
var connection = await tcpConnectionFactory.GetServerConnection(this, httpsHostName, port,
var connection = (await tcpConnectionFactory.GetServerConnection(this, httpsHostName, port,
HttpHeader.VersionUnknown, false, null,
true, sessionArgs, UpStreamEndPoint,
UpStreamHttpsProxy, true, cancellationToken);
UpStreamHttpsProxy, true, false, cancellationToken))!;
try
{
......
......@@ -7,13 +7,16 @@ namespace Titanium.Web.Proxy.IntegrationTests.Setup
{
public class TestProxyServer : IDisposable
{
public ProxyServer ProxyServer { get; private set; }
public ProxyServer ProxyServer { get; }
public int ListeningPort => ProxyServer.ProxyEndPoints[0].Port;
public CertificateManager CertificateManager => ProxyServer.CertificateManager;
public TestProxyServer(bool isReverseProxy, ProxyServer upStreamProxy = null)
{
ProxyServer = new ProxyServer();
var explicitEndPoint = isReverseProxy ?
(ProxyEndPoint)new TransparentProxyEndPoint(IPAddress.Any, 0, true) :
new ExplicitProxyEndPoint(IPAddress.Any, 0, true);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment