我很乐意使用nginx来提供具有多个域名和SSL的网站:
两者都使用相同的vhost,所以我只设置server_name两次.问题是,我需要nginx为每个域名提供正确的ssl证书.
这可能是一个虚拟主机还是我需要设置两个虚拟主机?
我有一个带有自签名证书的服务器,但也需要客户端证书身份验证.我正在尝试获取原始CA服务器证书,因此我可以将其导入密钥库.任何人都有一些关于如何轻松做到这一点的建议?谢谢.
如果我使用任何svn
与远程服务器通信的命令,我会收到以下错误:
Error validating server certificate for 'https://...':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
Certificate information:
- Hostname: ...
- Valid: from Wed, 01 Sep 2010 08:25:36 GMT until Thu, 06 Oct 2011 08:25:36 GMT
- Issuer: ...
- Fingerprint: ...
(R)eject, accept (t)emporarily or accept (p)ermanently?
Run Code Online (Sandbox Code Playgroud)
如果我永久命中,我可以正确运行命令.但是在下一个svn
命令中,我得到了同样的问题,必须再次确认!为什么不svn
永久保存我的选择?我怎么解决这个问题?
谢谢你的帮助!
我正在调用以下客户端的一些HTTPS Web服务:
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
/**
* Handles http and https connections. It sends XML request over http (or https)
* to SOAP web service and receive the XML reply.
*
* @author mhewedy
* @date 30.10.2010
*/
public class HttpWSXmlClient
{
private final String ws_url;
private byte[] requestData;
public HttpWSXmlClient(String wsUrl)
{
this.ws_url = wsUrl;
}
public void readRequest(String xmlRequestFilePath)
{
try
{
InputStream …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用客户端证书来使用Web API对设备进行身份验证和授权,并开发了一个简单的概念证明来解决潜在解决方案的问题.我遇到的问题是Web应用程序没有收到客户端证书.一些人报告了这个问题,包括在本问答中,但没有一个人有答案.我希望提供更多细节来重振这个问题,并希望得到我的问题的答案.我对其他解决方案持开放态度.主要要求是用C#编写的独立进程可以调用Web API并使用客户端证书进行身份验证.
此POC中的Web API非常简单,只返回单个值.它使用一个属性来验证是否使用了HTTPS以及是否存在客户端证书.
public class SecureController : ApiController
{
[RequireHttps]
public string Get(int id)
{
return "value";
}
}
Run Code Online (Sandbox Code Playgroud)
以下是RequireHttpsAttribute的代码:
public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = "HTTPS Required"
};
}
else
{
var cert = actionContext.Request.GetClientCertificate();
if (cert == null)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = "Client Certificate Required"
};
}
base.OnAuthorization(actionContext);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这个POC中,我只是检查客户端证书的可用性.一旦这个工作,我可以添加证书中的信息检查,以验证证书列表. …
c# security client-certificates ssl-certificate asp.net-web-api
我试图在nginx中启用客户端证书身份验证,其中证书已由中间CA签名.使用由自签名根CA签名的证书时,我能够正常工作; 但是,当签名CA是中间CA时,这不起作用.
我的简单服务器部分如下所示:
server {
listen 443;
server_name _;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
ssl_client_certificate ca.pem;
ssl_verify_client on;
ssl_verify_depth 1;
location / {
root html;
index index.html index.htm;
}
}
Run Code Online (Sandbox Code Playgroud)
对于ca.pem的内容,我尝试过只使用中间CA并连接中间CA证书和根CA证书,例如:
cp intermediate.crt ca.pem
cat root.crt >> ca.pem
Run Code Online (Sandbox Code Playgroud)
我还验证了在使用相同的CA链时,从openssl的角度来看证书是有效的:
openssl verify -CAfile /etc/nginx/ca.pem certs/client.crt
certs/client.crt: OK
Run Code Online (Sandbox Code Playgroud)
我已经尝试将ssl_verify_depth显式设置为1(如上所述)然后甚至为0(不确定该数字的确切含义),但仍然会得到相同的错误.
我在中间CA的所有变体中得到的错误是"400 Bad Request",更具体地说是"SSL证书错误"(不确定这意味着什么).
也许nginx只是不支持中间证书的证书链?任何帮助非常感谢!
我们试图让Socket.io flashsockets通过HTTPS/WSS在Internet Explorer 9中运行.flashsockets通过HTTP工作,但HTTPS给我们带来了麻烦.我们使用的是socket.io版本0.8.7和socket.io-client版本0.9.1-1.
我们在端口443上通过SSL运行我们的websocket服务器.我们在正确的位置指定了我们的WebsocketMainInsecure.swf文件的位置(这些是跨域ws请求),我们正在swfobject嵌入中加载文件通过HTTPS.
我们在我们的安全组中为我们的EC2实例打开了端口843,并且通过HTTP成功呈现了交叉源策略文件.它似乎不通过HTTPS呈现(Chrome引发SSL连接错误).
我们尝试了两个版本的WebsocketMainInsecure.swf文件.第一个是Socket.io提供的文件,它是由WebsocketMainInsecure.as构建的,不包括该行
Security.allowInsecureDomain("*");
Run Code Online (Sandbox Code Playgroud)
这会在行SCRIPT16389: Unspecified error.
处引发错误WebSocket.__flash.setCallerUrl(location.href)
.
我们认为这是因为SWF文件不允许HTTPS请求,因此我们将WebSocketMainInsecure.swf文件替换为此repo上的文件:https://github.com/gimite/web-socket-js,因为它包括
Security.allowInsecureDomain("*");
Run Code Online (Sandbox Code Playgroud)
动作脚本代码中的行.当我们使用它时,我们看到flashsocket连接在无限循环中保持断开连接和重新连接.我们在Transport原型的onSocketError函数中将错误跟踪到socket.io库中的transport.js文件.它抛出错误:
[Error: 139662382290912:error:1408F092:SSL routines:SSL3_GET_RECORD:data length too long:s3_pkt.c:503:]
Run Code Online (Sandbox Code Playgroud)
我们甚至尝试将socket.io和socket.io-client更新到版本0.9.6,我们仍然遇到Access is denied
错误.
这个错误很难调试,现在我们不知道如何让flashsockets工作.我们想知道它是否可能与使用旧版本的socket.io有关,或者可能是我们的策略文件服务器不接受HTTPS请求,或者甚至可能是来自Web的WebSocketMainInsecure.swf文件的方式 - socket-js github repo是相对于socket.io-client所期望的而构建的.
我陷入与服务提供商的指责匹配,其服务提供商具有受SSL服务器和客户端证书保护的API .
openssl s_client -connect ... -cert ... -key ...
[shell ~]$ openssl s_client -connect host:443 -cert cert_and_key.pem -key cert_and_key.pem -state -quiet
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=2 **SNIP**
verify return:1
depth=1 **SNIP**
verify return:1
depth=0 **SNIP**
verify return:1
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server certificate request A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 …
Run Code Online (Sandbox Code Playgroud) stream_socket_enable_crypto(): SSL operation failed with code 1.
OpenSSL Error messages: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Run Code Online (Sandbox Code Playgroud)
我使用的是Laravel 4.2,PHP 5.6,Apache 2.4
我在Amazon ec2 Linux中安装了GoDaddy SSL.
当我使用https访问该网站时,SSL工作正常.
我调用我的函数时发生错误:
<?php
public function sendEmail()
{
\Mail::send ( 'emails.code.code', $data, function ($sendemail) use($email) {
$sendemail->from ( 'info@me.com', 'Me Team' );
$sendemail->to ( $email, '' )->subject ( 'Activate your account' );
} );
}
?>
Run Code Online (Sandbox Code Playgroud)
我读了一些关于这个的文章,他们说有些东西我们应该做一些改变,他们把那些代码但是我不知道在哪里插入它.
读过这篇文章:https://www.mimar.rs/en/sysadmin/2015/php-5-6-x-ssltls-peer-certificates-and-hostnames-verified-by-default/
和http://php.net/manual/en/migration56.openssl.php这个文档很难理解.
所以我的问题是如何解决这个问题?
我正在尝试设置我们的服务器以允许通过SSL进行流量.我知道SSL不适用于Name Virtual Host,但是我们在具有专用私有IP的虚拟机上拥有所有apache服务器.我们有一个主虚拟机,它具有mod_proxy设置,可以将流量路由到适当的vms.
但是,为了路由https流量,我们需要在代理和vms上安装证书.我们有一个可以在所有主机上使用的通配符证书.一切似乎都正常工作,但我在代理的apache日志中收到以下内容:
[警告]初始化:SSL服务器IP /端口冲突:host1.domain.com:443(/ etc/apache2/sites-enabled/host1:1)与host2.domain.com:443(/ etc/apache2/sites-启用/主机2:1)
我们在代理上设置的每个主机都有一条错误消息.我们的代理虚拟主机设置如下:
<VirtualHost ipaddress:443>
ServerName host1.domain.com
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / https://privateip:443/
ProxyPassReverse / https://privateip:443/
SSLProxyEngine on
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让这个工作吗?
ssl-certificate ×10
ssl ×5
java ×2
nginx ×2
amazon-ec2 ×1
apache ×1
apache2.4 ×1
c# ×1
certificate ×1
https ×1
keytool ×1
laravel-4 ×1
node.js ×1
openssl ×1
php-5.6 ×1
security ×1
socket.io ×1
svn ×1
vhosts ×1
web-services ×1