{"id":1817,"date":"2010-12-23T12:21:21","date_gmt":"2010-12-23T10:21:21","guid":{"rendered":"http:\/\/firefang.net\/blog\/?p=1817"},"modified":"2010-12-23T12:21:21","modified_gmt":"2010-12-23T10:21:21","slug":"%d7%92%d7%90%d7%95%d7%95%d7%94-%d7%95https","status":"publish","type":"post","link":"https:\/\/firefang.net\/blog\/1817","title":{"rendered":"\u05d2'\u05d0\u05d5\u05d5\u05d4 \u05d5HTTPS"},"content":{"rendered":"<p>\u05d0\u05d7\u05d3 \u05d4\u05db\u05d0\u05d1\u05d9\u05dd \u05d4\u05de\u05e4\u05ea\u05d9\u05e2\u05d9\u05dd \u05d5\u05d4\u05dc\u05d0 \u05e6\u05e4\u05d5\u05d9\u05d9\u05dd \u05e9\u05e0\u05ea\u05e7\u05dc\u05ea\u05d9 \u05d1\u05d4\u05dd \u05dc\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4 \u05e2\u05dd \u05d2'\u05d0\u05d5\u05d5\u05d4 \u05d4\u05d9\u05d4 \u05db\u05e9\u05e0\u05d9\u05e1\u05d9\u05ea\u05d9 \u05dc\u05ea\u05e7\u05e9\u05e8 \u05e2\u05dd \u05e9\u05e8\u05ea HTTPS \u05e9\u05e0\u05d7\u05ea\u05dd \u05d1\u05d7\u05ea\u05d9\u05de\u05d4 \u05e9\u05dc <a href=\"http:\/\/firefang.net\/blog\/1768\">StartSSL<\/a>.<br \/>\n\u05de\u05e1\u05ea\u05d1\u05e8 \u05e9\u05d2'\u05d0\u05d5\u05d5\u05d4 \u05de\u05d2\u05d9\u05e2\u05d4 \u05db\u05de\u05e2\u05d8 \u05d1\u05dc\u05d9 \u05d7\u05ea\u05d9\u05de\u05d5\u05ea \u05e9\u05dc \u05e1\u05e4\u05e7\u05d9 \u05d7\u05ea\u05d9\u05de\u05d5\u05ea (verisign \u05e9\u05dd, \u05d0\u05d1\u05dc \u05d4\u05e8\u05d1\u05d4 \u05de\u05d0\u05d5\u05d3 \u05d0\u05d7\u05e8\u05d9\u05dd \u05dc\u05d0).<br \/>\n\u05d7\u05e4\u05d9\u05e8\u05d5\u05ea \u05d1\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8 \u05d4\u05d5\u05d1\u05d9\u05dc\u05d5 \u05dc\u05db\u05dc \u05de\u05e0\u05d9 \u05e4\u05ea\u05e8\u05d5\u05e0\u05d5\u05ea \u05e9\u05dc\u05d0 \u05e2\u05d1\u05d3\u05d5, \u05d0\u05d5\u05dc\u05d9 \u05db\u05d9 \u05d4\u05d7\u05ea\u05d9\u05de\u05d4 \u05e9\u05dc\u05d9 \u05d4\u05d9\u05d0 Wildcard certificate  (*.site.com).<br \/>\n\u05e4\u05ea\u05e8\u05d5\u05df \u05d0\u05e4\u05e9\u05e8\u05d9 \u05d4\u05d5\u05d0 \u05dc\u05d9\u05d1\u05d0 \u05d0\u05ea \u05d7\u05ea\u05d9\u05de\u05ea \u05d4\u05e9\u05d5\u05e8\u05e9 \u05e9\u05dc StartSSL \u05dc\u05ea\u05d5\u05da \u05d4JVM, \u05d0\u05d1\u05dc \u05d6\u05d5 \u05e4\u05e2\u05d5\u05dc\u05d4 \u05d9\u05d3\u05e0\u05d9\u05ea \u05e9\u05db\u05dc \u05de\u05e9\u05ea\u05de\u05e9 \u05e6\u05e8\u05d9\u05da \u05dc\u05e2\u05e9\u05d5\u05ea \u05d5\u05d1\u05db\u05dc \u05de\u05e7\u05e8\u05d4 \u05d4\u05d9\u05d0 \u05dc\u05d0 \u05e2\u05d1\u05d3\u05d4 \u05dc\u05d9, \u05d0\u05d5\u05dc\u05d9 \u05d1\u05d2\u05dc\u05dc \u05e1\u05d5\u05d2 \u05d4\u05d7\u05ea\u05d9\u05de\u05d4.<br \/>\n\u05db\u05dc \u05d6\u05d4 \u05de\u05e2\u05e6\u05d1\u05df \u05dc\u05de\u05d3\u05d9, \u05d4\u05d3\u05e4\u05d3\u05e4\u05df \u05e1\u05d5\u05de\u05da \u05e2\u05dc \u05d4\u05d0\u05ea\u05e8 \u05d0\u05d1\u05dc \u05d2'\u05d0\u05d5\u05d5\u05d4 \u05dc\u05d0 \u05de\u05e1\u05db\u05d9\u05de\u05d4 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8:<br \/>\n\u05e0\u05e1\u05d9\u05d5\u05df \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1URL \u05d4\u05e8\u05d2\u05d9\u05dc \u05e9\u05dc \u05d2'\u05d0\u05d5\u05d5\u05d4 \u05db\u05d3\u05d9 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05d1HTTPS \u05d1\u05d3\u05e8\u05da \u05db\u05dc\u05dc \u05de\u05d5\u05d1\u05d9\u05dc \u05dc\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d4\u05e0\u05e4\u05dc\u05d0\u05d4 \u05d4\u05d1\u05d0\u05d4 (\u05d0\u05dc\u05d0 \u05d0\u05dd \u05de\u05d3\u05d5\u05d1\u05e8 \u05d1\u05d7\u05ea\u05d9\u05de\u05d4 \u05e9\u05d7\u05ea\u05dd \u05d4\u05e9\u05d5\u05e8\u05e9 \u05e9\u05dc\u05d4 \u05d9\u05d3\u05d5\u05e2 \u05dcJVM):<br \/>\n<code lang=\"java\"><br \/>\nCaused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target<br \/>\n\tat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:294)<br \/>\n\tat sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:200)<br \/>\n\tat sun.security.validator.Validator.validate(Validator.java:218)<br \/>\n\tat com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)<br \/>\n\tat com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)<br \/>\n\tat com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)<br \/>\n\tat com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1053)<br \/>\n\t... 16 more<br \/>\nCaused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target<br \/>\n\tat sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)<br \/>\n\tat java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)<br \/>\n\tat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:289)<br \/>\n<\/code><\/p>\n<p>\u05e4\u05ea\u05e8\u05d5\u05df:<br \/>\n\u05de\u05e2\u05d1\u05e8 <a href=\"http:\/\/hc.apache.org\/\">\u05dcHTTPClient<\/a> \u05e9\u05dc \u05d0\u05e4\u05d0\u05e6'\u05d9 \u05d5\u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05e7\u05d5\u05d3 \u05d4\u05d1\u05d0 (\u05d3\u05d5\u05d2\u05de\u05d0 \u05dcGET \u05d5\u05dcPOST)<br \/>\n\u05d4\u05ea\u05d9\u05e2\u05d5\u05d3 \u05e9\u05dc \u05d4\u05e1\u05e4\u05e8\u05d9\u05d4 \u05dc\u05d0 \u05de\u05e9\u05d4\u05d5, \u05d9\u05e9 \u05db\u05de\u05d4 \u05d2\u05e8\u05e1\u05d0\u05d5\u05ea \u05dc\u05d0 \u05ea\u05d5\u05d0\u05de\u05d5\u05ea \u05e9\u05dc\u05d4 \u05d5\u05d4\u05ea\u05d9\u05e2\u05d5\u05d3 \u05de\u05ea\u05d9\u05d9\u05d7\u05e1 \u05dc\u05d2\u05e8\u05e1\u05d0 \u05d9\u05e9\u05e0\u05d4.<br \/>\n\u05d4\u05e7\u05d5\u05d3 \u05d4\u05d1\u05d0 \u05e2\u05d5\u05d1\u05d3 \u05e2\u05dd \u05d2\u05e8\u05e1\u05d0 4.0.3 \u05e9\u05dc HTTPClient \u05d54.1.0 \u05e9\u05dc HTTPCore (\u05d6\u05d5 \u05ea\u05dc\u05d5\u05ea \u05e0\u05d3\u05e8\u05e9\u05ea \u05dcHTTPClient, \u05d0\u05e4\u05e9\u05e8 \u05dc\u05d4\u05d5\u05e8\u05d9\u05d3 \u05de\u05d0\u05d5\u05ea\u05d5 \u05d0\u05ea\u05e8).<br \/>\n\u05e7\u05d7\u05d5 \u05d1\u05d7\u05e9\u05d1\u05d5\u05df \u05e9\u05d4\u05e4\u05ea\u05e8\u05d5\u05df \u05d4\u05d6\u05d4 \u05de\u05d0\u05e4\u05e9\u05e8 \u05ea\u05e7\u05d9\u05e4\u05ea MAN IN THE MIDDLE \u05db\u05d3\u05d9 \u05dc\u05d6\u05d9\u05d9\u05e3 \u05d0\u05ea \u05d4\u05d7\u05ea\u05d9\u05de\u05d4, \u05d0\u05d1\u05dc \u05de\u05d1\u05d7\u05d9\u05e0\u05d4 \u05e4\u05e8\u05e7\u05d8\u05d9\u05ea \u05e2\u05d3\u05d9\u05e3 \u05de\u05e9\u05d4\u05d5 \u05e9\u05e2\u05d5\u05d1\u05d3 \u05d0\u05d1\u05dc \u05e7\u05e6\u05ea \u05e4\u05d2\u05d9\u05e2 \u05de\u05d0\u05e9\u05e8 \u05de\u05e9\u05d4\u05d5 \u05e9\u05dc\u05d0 \u05e2\u05d5\u05d1\u05d3 \u05d1\u05db\u05dc\u05dc. (\u05d5\u05db\u05de\u05d5\u05d1\u05df \u05e9\u05e9\u05d9\u05de\u05d5\u05e9 \u05d1HTTPS \u05d4\u05d5\u05d0 \u05e2\u05d3\u05d9\u05e3 \u05e2\u05dc \u05e9\u05d9\u05de\u05d5\u05e9 \u05d1HTTP \u05e0\u05e7\u05d9 \u05d1\u05db\u05dc \u05de\u05e7\u05e8\u05d4).<\/p>\n<p><code lang=\"java\"><\/p>\n<p>import java.io.ByteArrayInputStream;<br \/>\nimport java.io.ByteArrayOutputStream;<br \/>\nimport java.io.IOException;<br \/>\nimport java.io.InputStream;<br \/>\nimport java.io.OutputStream;<br \/>\nimport java.net.MalformedURLException;<br \/>\nimport java.net.URL;<br \/>\nimport java.security.cert.CertificateException;<br \/>\nimport java.security.cert.X509Certificate;<\/p>\n<p>import javax.net.ssl.SSLContext;<br \/>\nimport javax.net.ssl.TrustManager;<br \/>\nimport javax.net.ssl.X509TrustManager;<\/p>\n<p>import org.apache.http.HttpEntity;<br \/>\nimport org.apache.http.HttpResponse;<br \/>\nimport org.apache.http.auth.AuthScope;<br \/>\nimport org.apache.http.auth.UsernamePasswordCredentials;<br \/>\nimport org.apache.http.client.methods.HttpGet;<br \/>\nimport org.apache.http.client.methods.HttpPost;<br \/>\nimport org.apache.http.conn.ClientConnectionManager;<br \/>\nimport org.apache.http.conn.scheme.Scheme;<br \/>\nimport org.apache.http.conn.scheme.SchemeRegistry;<br \/>\nimport org.apache.http.conn.ssl.SSLSocketFactory;<br \/>\nimport org.apache.http.entity.InputStreamEntity;<br \/>\nimport org.apache.http.impl.client.DefaultHttpClient;<br \/>\nimport org.apache.http.params.CoreConnectionPNames;<br \/>\nimport org.apache.http.util.EntityUtils;<\/p>\n<p>public class HTTPClientSSLExample<br \/>\n{<br \/>\n\tpublic static void main(String[] args) throws MalformedURLException, IOException<br \/>\n\t{<br \/>\n\t\tbyte[] bytes = getURLBytes_httpclient(\"https:\/\/www.startssl.com\/\", 30000, 30000);<br \/>\n\t\tSystem.out.println(new String(bytes));<br \/>\n\t}<\/p>\n<p>\tpublic static byte[] getURLBytes_httpclient(String url, int connectionTimeout, int readTimeout) throws IOException<br \/>\n\t{<br \/>\n\t\tlong now = System.currentTimeMillis();<\/p>\n<p>\t\tDefaultHttpClient httpclient = getHttpClient(url);<\/p>\n<p>\t\thttpclient.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, readTimeout);<br \/>\n\t\thttpclient.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connectionTimeout);<\/p>\n<p>\t\tHttpGet get = new HttpGet(url);<br \/>\n\t\tHttpResponse response = httpclient.execute(get);<br \/>\n\t\tint res = response.getStatusLine().getStatusCode();<br \/>\n\t\tif (res == 200)<br \/>\n\t\t{<br \/>\n\t        HttpEntity entity = response.getEntity();<br \/>\n\t\t\tint len = (int) entity.getContentLength();<br \/>\n\t\t\tInputStream in = entity.getContent();<br \/>\n\t\t\tByteArrayOutputStream bout = new ByteArrayOutputStream(len > 0 ? len : 1000);<br \/>\n\t\t\tpump(in, bout);<br \/>\n\t\t\treturn bout.toByteArray();<br \/>\n\t\t}<br \/>\n\t\telse<br \/>\n\t\t{<br \/>\n\t\t\tString bs = \"\";<br \/>\n\t\t\ttry<br \/>\n\t\t\t{<br \/>\n\t\t\t\tHttpEntity entity = response.getEntity();<br \/>\n\t\t\t\tbs = entity == null ? null : EntityUtils.toString(entity);<br \/>\n\t\t\t}<br \/>\n\t\t\tcatch (IOException e)<br \/>\n\t\t\t{<br \/>\n\t\t\t\tbs += \" || Exception while trying to read data from stream : \" + e.getMessage();<br \/>\n\t\t\t}<\/p>\n<p>\t\t\tthrow new IOException(\"Server returned HTTP \" + res + \" after \" + (System.currentTimeMillis() - now) + \" ms, URL : \" + url + \" data: \" + bs);<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>\tpublic static ByteArrayInputStream openInputStream_httpclient(String url, int connectionTimeout, int readTimeout, byte[] postdata) throws IOException<br \/>\n\t{<br \/>\n\t\tif (postdata != null)<br \/>\n\t\t{<br \/>\n\t\t\tDefaultHttpClient httpClient = getHttpClient(url);<br \/>\n\t\t\tHttpPost post = new HttpPost(url);<br \/>\n\t\t\tInputStreamEntity reqEntity = new InputStreamEntity(new  ByteArrayInputStream(postdata), postdata.length);<br \/>\n\t\t\treqEntity.setContentType(\"binary\/octet-stream\");<br \/>\n\t\t\tpost.setEntity(reqEntity);<br \/>\n\t\t\tHttpResponse response = httpClient.execute(post);<br \/>\n\t\t\tint res = response.getStatusLine().getStatusCode();<br \/>\n\t\t\tif (res == 200)<br \/>\n\t\t\t{<br \/>\n\t\t        HttpEntity entity = response.getEntity();<br \/>\n\t\t\t\tint len = (int) entity.getContentLength();<br \/>\n\t\t\t\tInputStream in = entity.getContent();<br \/>\n\t\t\t\tByteArrayOutputStream bout = new ByteArrayOutputStream(len > 0 ? len : 1000);<br \/>\n\t\t\t\tpump(in, bout);<br \/>\n\t\t\t\treturn new ByteArrayInputStream(bout.toByteArray());<br \/>\n\t\t\t}<br \/>\n\t\t\telse<br \/>\n\t\t\t{<br \/>\n\t\t\t\tthrow new IOException(\"Http response code \" + res);<br \/>\n\t\t\t}<br \/>\n\t\t}<br \/>\n\t\telse<br \/>\n\t\t{<br \/>\n\t\t\tbyte[] bytes = getURLBytes_httpclient(url, connectionTimeout, readTimeout);<br \/>\n\t\t\treturn new ByteArrayInputStream(bytes);<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>\tprivate static DefaultHttpClient getHttpClient(String url1) throws IOException<br \/>\n\t{<br \/>\n\t\tDefaultHttpClient httpclient = new DefaultHttpClient();<\/p>\n<p>\t\ttry<br \/>\n\t\t{<br \/>\n\t\t\tSSLContext ctx = SSLContext.getInstance(\"TLS\");<br \/>\n\t\t\tX509TrustManager tm = new X509TrustManager()<br \/>\n\t\t\t{<\/p>\n<p>\t\t\t\tpublic void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException<br \/>\n\t\t\t\t{<br \/>\n\t\t\t\t}<\/p>\n<p>\t\t\t\tpublic void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException<br \/>\n\t\t\t\t{<br \/>\n\t\t\t\t}<\/p>\n<p>\t\t\t\tpublic X509Certificate[] getAcceptedIssuers()<br \/>\n\t\t\t\t{<br \/>\n\t\t\t\t\treturn null;<br \/>\n\t\t\t\t}<br \/>\n\t\t\t};<br \/>\n\t\t\tctx.init(null, new TrustManager[]<br \/>\n\t\t\t{<br \/>\n\t\t\t\ttm<br \/>\n\t\t\t}, null);<br \/>\n\t\t\tSSLSocketFactory ssf = new SSLSocketFactory(ctx);<br \/>\n\t\t\tssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);<br \/>\n\t\t\tClientConnectionManager ccm = httpclient.getConnectionManager();<br \/>\n\t\t\tSchemeRegistry sr = ccm.getSchemeRegistry();<br \/>\n\t\t\tsr.register(new Scheme(\"https\", ssf, 443));<br \/>\n\t\t\thttpclient = new DefaultHttpClient(ccm, httpclient.getParams());<br \/>\n\t\t}<br \/>\n\t\tcatch (Exception ex)<br \/>\n\t\t{<br \/>\n\t\t\tex.printStackTrace();<br \/>\n\t\t\treturn null;<br \/>\n\t\t}<\/p>\n<p>\t\t\/\/ This block handles urls with user:password@server block<br \/>\n\t\tURL u = new URL(url1);<br \/>\n\t\tString userInfo = u.getUserInfo();<br \/>\n\t\tif (userInfo != null)<br \/>\n\t\t{<br \/>\n\t\t\tString user;<br \/>\n\t\t\tString password;<br \/>\n\t\t\tint i = userInfo != null ? userInfo.indexOf(':') : -1;<br \/>\n\t\t\tif (i == -1)<br \/>\n\t\t\t{<br \/>\n\t\t\t\tuser = userInfo.substring(0);<br \/>\n\t\t\t\tpassword = \"\";<br \/>\n\t\t\t}<br \/>\n\t\t\telse<br \/>\n\t\t\t{<br \/>\n\t\t\t\tuser = userInfo.substring(0, i);<br \/>\n\t\t\t\tpassword = userInfo.substring(i + 1);<br \/>\n\t\t\t}<br \/>\n\t\t\thttpclient.getCredentialsProvider().setCredentials(new AuthScope(u.getHost(), u.getPort()), new UsernamePasswordCredentials(user, password));<br \/>\n\t\t}<br \/>\n\t\treturn httpclient;<br \/>\n\t}<\/p>\n<p>\t\/**<br \/>\n\t * Writes the bytes read from the given input stream into the given output<br \/>\n\t * stream until the end of the input stream is reached. Returns the amount<br \/>\n\t * of bytes actually read\/written.<br \/>\n\t *\/<br \/>\n\tpublic static int pump(InputStream in, OutputStream out) throws IOException<br \/>\n\t{<br \/>\n\t\tbyte[] buf = new byte[4096];<br \/>\n\t\tint count;<br \/>\n\t\tint amountRead = 0;<\/p>\n<p>\t\twhile ((count = in.read(buf)) != -1)<br \/>\n\t\t{<br \/>\n\t\t\tout.write(buf, 0, count);<br \/>\n\t\t\tamountRead += count;<br \/>\n\t\t}<\/p>\n<p>\t\treturn amountRead;<br \/>\n\t}<br \/>\n}<br \/>\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u05d0\u05d7\u05d3 \u05d4\u05db\u05d0\u05d1\u05d9\u05dd \u05d4\u05de\u05e4\u05ea\u05d9\u05e2\u05d9\u05dd \u05d5\u05d4\u05dc\u05d0 \u05e6\u05e4\u05d5\u05d9\u05d9\u05dd \u05e9\u05e0\u05ea\u05e7\u05dc\u05ea\u05d9 \u05d1\u05d4\u05dd \u05dc\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4 \u05e2\u05dd \u05d2'\u05d0\u05d5\u05d5\u05d4 \u05d4\u05d9\u05d4 \u05db\u05e9\u05e0\u05d9\u05e1\u05d9\u05ea\u05d9 \u05dc\u05ea\u05e7\u05e9\u05e8 \u05e2\u05dd \u05e9\u05e8\u05ea HTTPS \u05e9\u05e0\u05d7\u05ea\u05dd \u05d1\u05d7\u05ea\u05d9\u05de\u05d4 \u05e9\u05dc StartSSL. \u05de\u05e1\u05ea\u05d1\u05e8 \u05e9\u05d2'\u05d0\u05d5\u05d5\u05d4 \u05de\u05d2\u05d9\u05e2\u05d4 \u05db\u05de\u05e2\u05d8 \u05d1\u05dc\u05d9 \u05d7\u05ea\u05d9\u05de\u05d5\u05ea \u05e9\u05dc \u05e1\u05e4\u05e7\u05d9 \u05d7\u05ea\u05d9\u05de\u05d5\u05ea (verisign \u05e9\u05dd, \u05d0\u05d1\u05dc \u05d4\u05e8\u05d1\u05d4 \u05de\u05d0\u05d5\u05d3 \u05d0\u05d7\u05e8\u05d9\u05dd \u05dc\u05d0). \u05d7\u05e4\u05d9\u05e8\u05d5\u05ea \u05d1\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8 \u05d4\u05d5\u05d1\u05d9\u05dc\u05d5 \u05dc\u05db\u05dc \u05de\u05e0\u05d9 \u05e4\u05ea\u05e8\u05d5\u05e0\u05d5\u05ea \u05e9\u05dc\u05d0 \u05e2\u05d1\u05d3\u05d5, \u05d0\u05d5\u05dc\u05d9 \u05db\u05d9 \u05d4\u05d7\u05ea\u05d9\u05de\u05d4 \u05e9\u05dc\u05d9 \u05d4\u05d9\u05d0 Wildcard certificate (*.site.com). \u05e4\u05ea\u05e8\u05d5\u05df \u05d0\u05e4\u05e9\u05e8\u05d9 \u05d4\u05d5\u05d0 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/firefang.net\/blog\/1817\" class=\"more-link\">\u05dc\u05d4\u05de\u05e9\u05d9\u05da \u05dc\u05e7\u05e8\u05d5\u05d0<span class=\"screen-reader-text\"> \u05d2'\u05d0\u05d5\u05d5\u05d4 \u05d5HTTPS<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,17],"tags":[],"class_list":["post-1817","post","type-post","status-publish","format-standard","hentry","category-java","category-open-soruce"],"_links":{"self":[{"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/posts\/1817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/comments?post=1817"}],"version-history":[{"count":9,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/posts\/1817\/revisions"}],"predecessor-version":[{"id":1826,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/posts\/1817\/revisions\/1826"}],"wp:attachment":[{"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/media?parent=1817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/categories?post=1817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/tags?post=1817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}