我正在按照OCSP Responder中定义的规则创建RFC 6960。
因此,我需要实现一个 GET 服务,其路由必须为:
{url}/{url-encoding of base-64 encoding of the DER encoding of the OCSPRequest}
我创建了GET操作:
[Route("api/ocsp")]
public class OcspController : Controller
{
[HttpGet]
[Route("{encoded}")]
public async Task<IActionResult> Get(string encoded)
{
var ocspHttpRequest = await Request.ToOcspHttpRequest();
var ocspHttpResponse = await OcspResponder.Respond(ocspHttpRequest);
return new OcspActionResult(ocspHttpResponse);
}
...
}
但是,在对URL进行编码时,ASP.NET Core找不到或返回针对该路由的错误请求。
base64中的Ocsp请求(请注意有两行):
MEkwRzBFMEMwQTAJBgUrDgMCGgUABBR1vr6HF4T/UsADPXoNr6lpJ1JRowQUJfgJ
6MaP2huu1lFzJOFlkswOcM8CCB6PD3SWpxwf
base64 ocsp请求的网址编码
MEkwRzBFMEMwQTAJBgUrDgMCGgUABBR1vr6HF4T%2FUsADPXoNr6lpJ1JRowQUJfgJ%0A6MaP2huu1lFzJOFlkswOcM8CCB6PD3SWpxwf
我该如何解决这个问题?
答案 0 :(得分:0)
由Base64编码产生的某些字符在URL路径中无效。可以更改此设置,但是出于某种原因设置它是出于安全考虑。如果允许这些角色,那么您将面临许多其他攻击无法实现的攻击。</ p>
不过,您可以随意将其作为查询字符串的一部分进行传递。这样处理就不会出错。
答案 1 :(得分:0)
有一个解决方法,您可以将 {encoded} 更改为 {*encoded},然后它将接受不允许的其他符号。