Git Product home page Git Product logo

tls-update's Introduction

TLSv1.2 Requirement

The Payment Card Industry Security Standards Council (PCI SSC) mandates that all credit card processors must retire early versions of TLS from service by the PCI deadline.

As part of this requirement, PayPal and Braintree are making this upgrade alongside the rest of the payments industry. PayPal and Braintree are updating its services to require TLS 1.2 for all HTTPS connections. PayPal and Braintree will also require HTTP/1.1 for all connections.

For more official, relevant information, see the 2017-2018 Merchant Security Roadmap Microsite:

See also Updating Your Production Environment to Support TLSv1.2 on the Braintree blog.

What does this mean for PayPal and Braintree merchants?

Merchants must verify that their systems can use the TLSv1.2 protocol with a SHA-256 certificate. As a merchant, you must make sure that you are up-to-date with security updates, including current versions of operating systems, encryption libraries, and runtime environments.

To get started, use the following notes to verify the TLSv1.2 readiness in your environments:


Prerequisites

  • These checks assume that you have installed all PayPal REST- and Braintree SDK-required libraries.
  • For these checks to be valid, run them on a production system or one that exactly matches the production configuration.

Java

Java requirements

Note: Java 8 is preferred because TLSv1.2 is the default in this Java version.

Java version TLSv1.2 support Requirements
5 and earlier No support

Upgrade to Java 6 or later.

Note: Java 8 is preferred because TLSv1.2 is the default in this Java version.
6 Available
7 Available
  • You must explicitly enable TLSv1.2.
  • You might require a PayPal SDK update or code change.
    8 Default
    • No code change is required.
    • Make sure that you're using the latest PayPal SDK.

    To verify your Java and TLS versions

    1. Set the TLS version through the SSLContext class.

    2. Verify that Java runtime 6 or later is installed:

      java -version
      

      If you have Java version 5 or earlier, upgrade it.

      Note: Java 8 is preferred because TLSv1.2 is the default in this Java version.

    3. Download the TlsCheck.java and TlsCheck.jar files.

    4. In a shell on your production system, run:

      > java -jar TlsCheck.jar
      
      • On success:

        Successfully connected to TLS 1.2 endpoint.
        
      • On failure:

        Failed to connect to TLS 1.2 endpoint.
        

    Supported SDKs


    .NET

    .NET requirements

    To enable TLSv1.2, you must install the .NET framework 4.5 or later.

    To verify your .NET and TLS versions

    1. Set the TLS version through ServicePointManager.SecurityProtocol enumeration.

    2. To verify that you have .NET framework 4.5 or later, run NetFrameworkVersions on the console of your production system. If you do not have .NET 4.5 or later, upgrade it.

    3. In a shell on your production system, run TlsCheck:

      > TlsCheck.exe
      
      • On success:

        PayPal_Connection_OK
        

    Supported SDKs


    PHP

    PHP requirements

    Guidelines

    Find OpenSSL in these locations:

    1. OpenSSL installed in your operating system's openssl version.
    2. OpenSSL extension installed in your PHP. Find this in your php.ini.
    3. OpenSSL used by PHP_CURL.curl_version().

    These OpenSSL extensions can be different, and you update each one separately.

    PayPal and other PHP SDKs use the same OpenSSL extension that PHP_CURL uses to make HTTP connections. The PHP_CURL OpenSSL extension must support TLSv1.2.

    The php_curl library uses its own version of the OpenSSL library, which is not the same version that PHP uses, which is the openssl.so file in php.ini.

    To verify your PHP and TLS versions

    1. To find the openssl_version information for cURL, run:

      php -r 'echo json_encode(curl_version(), JSON_PRETTY_PRINT);'
      

      The returned php_curl version might be different from the openssl version because they are different components.

    2. When you update your OpenSSL libraries, you must update the php_curl OpenSSL version and not the OS OpenSSL version.

    3. Download cacert.pem and TlsCheck.php.

    4. In a shell on your production system, run:

      php -f TlsCheck.php
      
      • On success:

        PayPal_Connection_OK
        
      • On failure:

        curl_error information
        

    Notes:

    • Make sure that your command line test uses the same versions of PHP and SSL/TLS libraries that your web server uses.
    • If you use MAMP or XAMPP as your development set up, the PHP that is packaged with them uses an earlier version of OpenSSL, which you cannot easily update. For more information about this issue and a temporary workaround, see Unknown SSL protocol error.


    Python

    Python requirements

    • Python uses the system-supplied OpenSSL.
    • TLSv1.2 requires OpenSSL 1.0.1c or later.

    To verify your Python and TLS versions

    1. In a shell on your production system, run the command for your environment:

      • For Python 2.x:

        $ python -c "import urllib2; print(urllib2.urlopen('https://tlstest.paypal.com/').read())"
        
      • For Python 3.x:

        $ python -c "import urllib.request; print(urllib.request.urlopen('https://tlstest.paypal.com/').read())"
        
        • On success:

          PayPal_Connection_OK
          
        • On failure, an URLError is raised:

          urllib2.URLError: <urlopen error EOF occurred in violation of protocol (_ssl.c:590)>
          urllib2.URLError: <urlopen error [Errno 54] Connection reset by peer>
          

    Ruby

    Ruby requirements

    • Ruby 2.0.0 or later and OpenSSL 1.0.1c or later are required:

      • Ruby 2.0.0 or later is required to use TLSv1.2 from the system-supplied OpenSSL.
      • TLSv1.2 requires OpenSSL 1.0.1c or later.
    • To update your dependencies, you might need to run bundle update.

    PayPal legacy Ruby SDK update

    For the PayPal legacy Ruby SDK packaged as PP_Ruby_NVP_SDK.zip, download this PP_Ruby_NVP_SDK.zip.

    To verify your Ruby and TLS versions

    1. In a shell on your production system, run:

      $ ruby -r'net/http' -e 'puts Net::HTTP.get(URI("https://tlstest.paypal.com/"))'
      
      • On success:

        PayPal_Connection_OK
        
      • On failure, a OpenSSL::SSL::SSLError or EOFError is thrown.


    Node

    Node requirements

    • Node.js uses the system supplied OpenSSL.
    • TLSv1.2 requires OpenSSL 1.0.1c or later.

    To verify your Node and TLS versions

    1. In a shell on your production system, run:

      $ node -e "var https = require('https'); https.get('https://tlstest.paypal.com/', function(res){ console.log(res.statusCode) });"
      
      • On success:

        200
        
      • On failure, a network error occurs.


    Native Mobile Apps

    Android

    Android requirements

    TLSv1.2 is the default for client connections in API 20 (Android 4.4W or KITKAT - wearable extensions).

    All Android app developers must make sure that their code and PayPal or Braintree SDKs provide explicit support for TLSv1.2. To verify correct implementation, test apps on API 16 through 19 devices (Android 4.1 through 4.4 platforms).

    After the TLSv1.2 upgrade, native app support for user devices earlier than API 16 (Android 4.1 or JELLY_BEAN) are not available. Fortunately, as of April 16, 2018, Google reports 0.7% of devices accessing the Play store are API 15 or earlier.

    Users of the PayPal or Braintree Android SDKs must update to the latest version. To illustrate how to support TLSv1.2 outside of the SDK, we have provided an example Android app.

    Supported SDKs

    iOS

    TLSv1.2 support was introduced in iOS 5. The PayPal iOS SDK and the Braintree iOS SDK both require iOS 7 or later. Apps built since 2013 will likely not need any updates.

    Windows

    Neither PayPal nor Braintree support any Windows SDKs. For a web browser integration, we recommend Braintree's JavaScript SDK.

    tls-update's People

    Stargazers

     avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

    Watchers

     avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

    tls-update's Issues

    Error 407 : Proxy

    General information

    • Environment: TLS-UPDATE
    • PayPal-Debug-ID values: none
    • Language, language version, and OS: Visual studio 2017/ Windows

    Issue description

    If you encounter problem "error 407" I invite you to use the code attached.

    
     System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                WebRequest wr = WebRequest.Create("https://tlstest.paypal.com/");
                IWebProxy proxy = wr.Proxy;
                if (proxy != null)
                {
                    string proxyuri = proxy.GetProxy(wr.RequestUri).ToString();
                    wr.UseDefaultCredentials = true;
                    wr.Proxy = new WebProxy(proxyuri, false);
                    wr.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
                }
                WebResponse response =wr.GetResponse();
                    
                using (var streamReader = new StreamReader(response.GetResponseStream()))
                {
                    Console.WriteLine(streamReader.ReadToEnd());
                }
    

    Perl test

    To validate if the Perl PayflowPro module will satisfy the requirement, I wrote the following test based on the example Python test. It passes for me with Perl 5.24 and LWP 6.22.

    Sample output:

    % perl pfp-test.perl
    Perl: 5.024001
    LWP: 6.22
    PayPal_Connection_OK
    

    Test program:

    #!/usr/local/bin/perl
    use strict;
    use LWP::UserAgent;
    
    print "Perl: $]\nLWP: $LWP::UserAgent::VERSION\n";
    
    my $ua = LWP::UserAgent->new;
    my $response = $ua->get('https://tlstest.paypal.com/');
    
    if ($response->is_success) {
      print $response->decoded_content,"\n";
    }
    else {
      die $response->status_line;
    }
    

    PayPal

    General information

    • Environment:
    • PayPal-Debug-ID values:
    • Language, language version, and OS:

    Issue description

    4got to mention

    General information

    • Environment:
    • PayPal-Debug-ID values:
    • Language, language version, and OS:

    Issue description

    ### General information * Environment: <!-- Is this issue in Sandbox or Production? --> * `PayPal-Debug-ID` values: <!-- Report PayPal-Debug-IDs from any logs --> * Language, language version, and OS: <!-- Example: Java 1.8.0_101-b13 on Ubuntu 16.10 --> ### Issue description <!-- To help us quickly reproduce your issue, include as many details as possible, such as logs, steps to reproduce, and so on. If the issue reports a new feature, follow the [user story](https://en.wikipedia.org/wiki/User_story) format to clearly describe the use case. -->

    General information

    • Environment:
    • PayPal-Debug-ID values:
    • Language, language version, and OS:

    Issue description

    PHP: Forcing ssl version

    I actually had to force the curl SSL option to get it work:

    curl_setopt($ch, CURLOPT_SSLVERSION, 6);

    Is it ok? Should i worry?

    <?php
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, "https://tlstest.paypal.com/");
    curl_setopt($ch, CURLOPT_SSLVERSION, 6);
    curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
    
    curl_exec($ch);
    echo "\n";
    
    if ($err = curl_error($ch)) {
            var_dump($err);
            echo "DEBUG INFORMATION:\n###########\n";
            echo "CURL VERSION:\n";
            echo json_encode(curl_version(), JSON_PRETTY_PRINT);
    }

    ASP.NET MVC Request returns : (426) Unknown

    General information

    • Environment: Production
    • PayPal-Debug-ID values:
    • Language, language version, and OS: C# ASP.NET MVC 5 on Windows Shared Hosting

    Issue description

    `

        public ActionResult Test()
        {
            string res = "nothing";
    
            try
            {
                using (var wr = WebRequest.Create("https://tlstest.paypal.com").GetResponse())
                using (StreamReader streamIn = new StreamReader(wr.GetResponseStream()))
                {
                    res = "Test1: " + streamIn.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                res = "Test1: " + ex.ToString();
            }
    
            try
            {
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                using (var wr = WebRequest.Create("https://tlstest.paypal.com").GetResponse())
                using (StreamReader streamIn = new StreamReader(wr.GetResponseStream()))
                {
                    res += "Test2: " + streamIn.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                res += "Test2: " + ex.ToString();
            }
    
            return Content(res);
        }
    

    `

    The first check TLS1.2+HTTP/1.1 throws exception:

    System.Net.WebException: The remote server returned an error: (426) Unknown. at System.Net.HttpWebRequest.GetResponse() at TTT.Controllers.PayPalController.Test()

    But after a few refreshes and minutes, it starts returning: PayPal_Connection_OK for both requests like:
    Test1: PayPal_Connection_OKTest2: PayPal_Connection_OK

    braintree - undefined method ssl_version

    Hi!

    When I set :TLSv1_2 on ruby i get this error:

    >> Braintree::Configuration.ssl_version = :TLSv1_2
    => :TLSv1_2
    >> Braintree::ClientToken.generate
    NoMethodError: undefined method `ssl_version=' for #<Net::HTTP api.sandbox.braintreegateway.com:443 open=false>
    	from /home/murbano/vlex/vendor/bundle/ruby/1.8/gems/braintree-2.71.0/lib/braintree/http.rb:79:in `_http_do'
    	from /home/murbano/vlex/vendor/bundle/ruby/1.8/gems/braintree-2.71.0/lib/braintree/http.rb:28:in `post'
    	from /home/murbano/vlex/vendor/bundle/ruby/1.8/gems/braintree-2.71.0/lib/braintree/client_token_gateway.rb:17:in `generate'
    	from /home/murbano/vlex/vendor/bundle/ruby/1.8/gems/braintree-2.71.0/lib/braintree/client_token.rb:8:in `generate'
    	from (irb):12

    How to fix it?

    libcurl upgrade may be required

    We found in at the check was failing due an out of date libcurl version. Default for CentOS 6 is 7.19. I appears that libcurl > 7.40 is required for TLSv1.2 support. There's a thread on this here. Just including this in case anyone else runs into this issue.

    Why is this happening to me

    General information

    • Environment:
    • PayPal-Debug-ID values:
    • Language, language version, and OS:

    Issue description

    Whether paypal_base-nvp supported by Java7?

    Hi Team,
    I installed Java1.7.0_79 and enabled TLSv1.2 in My server . When I'm trying to complete(DoCapture) a transaction. I'm getting
    "com.paypal.sdk.exceptions.FatalException: Unable to complete HTTPS transaction" Message in NVPAPICallere java when it trying to execute the line "int result = httpclient.executeMethod(httppost);" in same java. Then I printed the exception directly to get exact issue, it shows
    Exception :*"javax.net.ssl.SSLPeerUnverifiedException: Could not find class:ava.lang.ClassNotFoundException: oracle/security/cert/X509CertificateImpl". Please guide me to get it resolve.
    Thanks,
    Manikandarajan.

    Could not create SSL/TLS secure channel.

    Hi guys, since yesterday noon we are getting this error when consuming one of your REST APIs. Have you guys done anything that could affect the connection? (new certs or similar). The infrastructure of our service hasn't changed and we did consume your endpoint before without any problem.

    Cookie rejected by httpclient in java nvp

    [org.apache.commons.httpclient.HttpMethodBase(processCookieHeaders:1656)] Cookie rejected: "$Version=0; X-PP-SILOVER=name%3DSANDBOX3.API.1%26silo_version%3D880%26app%3Dappdispatcher_apit%26TIME%3D2096869206; $Path=/; $Domain=.paypal.com". Domain attribute ".paypal.com" violates RFC 2109: host minus domain may not contain any dots

    Tag

    General information

    • Environment:
    • PayPal-Debug-ID values:
    • Language, language version, and OS:

    Issue description

    "Account is limited" even if all the necessary updates have been performed.

    General information

    • Environment: Production (Web Console)
    • PayPal-Debug-ID values: N/A
    • Language, language version, and OS: PHP, Apache 2.4, Linux Debian 8.x

    Issue description

    After having performed all the requested updates, including the TlsCheck.php test (result: PayPal_Connection_OK) the web site reports "Your account has been limited".

    The account goes back to "unlimited" only after providing a manual confirmation (something like "type 'Accept"...) that the changes have been implemented.

    This is not mentioned anywhere in the documentation, and in many cases it requires a non-technical user (e.g administrative staff in a mid-sized operation) to confirm something they're not really expected to understand in detail.

    Received fatal alert: handshake_failure

    our jdk version: jdk-8u73-linux-x64.tar.gz
    our paypal sdk version:

    <dependency>
        <groupId>com.paypal.sdk</groupId>
        <artifactId>rest-api-sdk</artifactId>
        <version>1.9.2</version>
    </dependency>

    The most important and strange thing is our test server can create payment successfully in sandbox server sometimes, sometimes can not. the payment can be created 1 or 2 times when we try 20 times.

    I am make sure our jdk version and paypal sdk version are matched your requirement about TLS, otherwise why we can create payment suceessfully sometimes.

    In our test server, we can create payment sucessfully sometimes, but it is more diffcult than in our local developer env.

    Caused by: com.paypal.base.exception.HttpErrorException: retry fails..  check log for more information
            at com.paypal.base.HttpConnection.executeWithStream(HttpConnection.java:197) ~[rest-api-sdk-1.4.2.jar:1.4.2]
            at com.paypal.base.HttpConnection.execute(HttpConnection.java:67) ~[rest-api-sdk-1.4.2.jar:1.4.2]
            at com.paypal.base.rest.OAuthTokenCredential.generateOAuthToken(OAuthTokenCredential.java:221) ~[classes/:1.4.2]
            ... 140 common frames omitted
    Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
            at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[na:1.8.0_73]
            at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) ~[na:1.8.0_73]
            at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2023) ~[na:1.8.0_73]
            at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1125) ~[na:1.8.0_73]
            at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) ~[na:1.8.0_73]
            at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) ~[na:1.8.0_73]
    

    Python testing needs to be improved, additional note regarding fail case, OSX how to fix?

    3 things:

    1. I have noticed that following command for testing needs to be a bit improved:

    python -c "import urllib2; urllib2.urlopen('https://tlstest.paypal.com/').read()"
    to:

    python -c "import urllib2; print(urllib2.urlopen('https://tlstest.paypal.com/').read())"

    1. Other thing is that in my case due old OSX python ssl library is linked to old (official) OSX libssl version I get following error:

    urllib2.URLError: <urlopen error [Errno 54] Connection reset by peer>

    It would be nice to add a remark to this kind of error.

    1. I am encountering this problem on OSX 10.9.5 and 10.11 - where default openssl version is 0.9.8 which does not support TLS v 1.1+ (see previous note). What should I do to fix the problem?

    PayPal's engineers suck at .NET

    You guys are absolutely horrible when it comes to the .NET platform! Your TLS 1.2 detection sucks and can yield false positives. First, you're code runs independently from the end-user's website application context. It's possible to have multiple versions of .NET installed and a website can be set to use a specific version that doesn't support TLS 1.2. Second, even if the website's framework version supports it, you're crummy check program won't help either if the website's code makes explicit calls to TLS 1.1 code.

    A competent .NET programmer would have produced an ASPX file with inline code to check wether TLS 1.2 is supported. The end-user would simply drop the file into their website home directory and execute it using an URL. This would require no downtime and runs within the application context of the site.

    The aspx file should explicitly set the protocol to TLS 1.1 and make service calls to PayPal which checks the protocol remotely. If it passes, then the drop in file can definitely report the web site is using TLS 1.2, since it means 1.1 has been disabled at the server or at the framework level.

    https://stackoverflow.com/questions/33761919/tls-1-2-in-net-framework-4-0

    Ruby check requires Net::HTTP incorrectly

    The current check is:

    ruby -r'net/HTTP' -e 'uri = URI("https://tlstest.paypal.com/"); puts Net::HTTP.get(uri)'

    When it should be:

    ruby -r'net/http' -e 'uri = URI("https://tlstest.paypal.com/"); puts Net::HTTP.get(uri)'

    As an aside, it could be shortened a bit by going with:

    ruby -r'net/http' -e 'puts Net::HTTP.get(URI("https://tlstest.paypal.com/"))'

    Great

    General information

    • Environment:
    • PayPal-Debug-ID values:
    • Language, language version, and OS:

    Issue description

    SSL error connecting to Braintree staging

    Hi

    I've run the TlsCheck.php script and it gives me PayPal_Connection_OK. I've also updated to Braintree_PHP 3.21.1. However, when I try to use the Braintree API, I get this error in my log:

    Braintree\Exception\SSLCertificate: in Braintree\Http->_doUrlRequest() (line 167 of /var/www/<snip>/composer/braintree/braintree_php/lib/Braintree/Http.php).

    Edit - I should point out this is attempting to connect to the sandbox environment.

    Android Webview

    Hi.
    In my app I use native webview to show PayPal. Unfortunately, it seems, it's not possible to set default protocol for webview. It looks like PayPal will stop working in my app also on version where TLS v1.2 is not set as default. Is there any solution for this case ? Thank you

    If there is no solution for this issue, maybe it will be good to mention it in the main page, for next visitors.

    [email protected]

    General information

    • Environment:
    • PayPal-Debug-ID values:
    • Language, language version, and OS:

    Issue description

    License

    General information

    • Environment: N/A
    • PayPal-Debug-ID values: N/A
    • Language, language version, and OS: N/A

    Issue description

    There's some source code examples in this repo that are designed to be copied, almost wholesale, into other projects. Can PayPal indicate that the source is public domain? i.e. It can be copied freely even into closed source projects? This is the code I'm looking at in particular:

    https://github.com/paypal/TLS-update/blob/master/android/app/src/main/java/com/paypal/developer/paypaltlscheck/TlsSocketFactory.java

    Thank you for the wealth of information in this repo!

    Windows server 2003

    I was installed framework 4.0 in the windows server 2003. But when I tried run TlsCheck.exe, and it was impossible,
    I need update paypal in web appllcation developed in asp and vs2005.
    Thank's

    Issue

    General information

    • Environment:
    • PayPal-Debug-ID values:
    • Language, language version, and OS:

    Issue description

    General

    General information

    • Environment:
    • PayPal-Debug-ID values:
    • Language, language version, and OS:

    Issue description

    Recommend Projects

    • React photo React

      A declarative, efficient, and flexible JavaScript library for building user interfaces.

    • Vue.js photo Vue.js

      🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

    • Typescript photo Typescript

      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    • TensorFlow photo TensorFlow

      An Open Source Machine Learning Framework for Everyone

    • Django photo Django

      The Web framework for perfectionists with deadlines.

    • D3 photo D3

      Bring data to life with SVG, Canvas and HTML. 📊📈🎉

    Recommend Topics

    • javascript

      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

    • web

      Some thing interesting about web. New door for the world.

    • server

      A server is a program made to process requests and deliver data to clients.

    • Machine learning

      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

    • Game

      Some thing interesting about game, make everyone happy.

    Recommend Org

    • Facebook photo Facebook

      We are working to build community through open source technology. NB: members must have two-factor auth.

    • Microsoft photo Microsoft

      Open source projects and samples from Microsoft.

    • Google photo Google

      Google ❤️ Open Source for everyone.

    • D3 photo D3

      Data-Driven Documents codes.