{"action":"created","comment":{"url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/comments/36686912","id":36686912,"diff_hunk":"@@ -0,0 +1,363 @@\n+Microsoft PKI (MSPKI) Quick Installation Guide\n+==============================================\n+:encoding: UTF-8\n+:lang: en\n+:doctype: book\n+\n+include::includes/global-attributes.asciidoc[]\n+\n+About this Guide\n+----------------\n+\n+This guide has been created to give a quick start to configure the Microsoft PKI with PacketFence 5.4+. This guide does not include advanced troubleshooting of EAP-TLS connections. Refer to the relevant documentation of EAP-TLS, RADIUS and OpenSSL for advanced features.\n+\n+Assumptions\n+-----------\n+\n+* You have at least one server with PacketFence 5.4 or later.\n+* The server already has a properly configured switch with 802.1X support.\n+* The PacketFence RADIUS server is working in your environment.\n+* You have a Microsoft Windows 2008 R2 Entreprise server installed.\n+* The PacketFence management IP will be 192.168.1.5.\n+* The RADIUS shared secret is \"useStrongerSecret\".\n+* In this guide you will see a lot of use of <ServerDNSName>, most of the MSPKI services requires in their configuration to use the FQDN of the server and not his IP.\n+\n+Installation\n+------------\n+\n+Step 1: Install Active Directory Certificate Service (ADCS)\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+NOTE: This will cover the configuration for Active Directory Certificate Services (ADCS) on Microsoft Windows 2008 R2 Entreprise. The installation of ADCS is not covered by this guide, see the Microsoft white paper about it for more information (http://social.technet.microsoft.com/wiki/contents/articles/9063.network-device-enrollment-service-ndes-in-active-directory-certificate-services-ad-cs.aspx).\n+\n+For the integration with PacketFence, the following subroles need to be installed in ADCS:\n+\n+* Certification Authorithy Web Enrollment\n+* Network Device Enrollment Service\n+* Online Responder\n+\n+Before you start the configuration, a hotfix is necessary due to a Microsoft issue. After restarting the ADCS service, the server cannot enroll new certificate and display the following error message: \"The RPC Server is unavailable\". The hotfix is available here: https://support.microsoft.com/en-us/kb/2633200\n+\n+Communication between the MSPKI and PacketFence will be using port 80 with the following configuration.\n+\n+Configuring Network Device Enrollment Service (NDES)\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+For the deployment of ADCS you will need to configure Network Enrollment Device Service (NDES). This subrole will allow us to exchange certificate with the MSPKI server via Simple Certificate Exchange Protocol (SCEP).\n+\n+Every configuration change has to be done by an account with administrative privileges.\n+\n+Allowing the use of NDES as a PKI provider in BYOD deployment requires the following changes.\n+\n+Challenge Password\n+^^^^^^^^^^^^^^^^^^\n+\n+MSCEP includes by default a challenge password, which is unique and dynamically generated for each device which wants to enroll. In a BYOD deployment, this can be a barrier as a user cannot register a device by himself without the intervention of an administrator. Since we use NDES with PacketFence, our security to obtain a certificate would be the credentials necessary to access the enrollment system.\n+\n+To disable the challenge password you need to modifiy the following key in the Windows registry. \n+\n+Click `Start` and enter `regedit`.\n+\n+Navigate to `Computer -> HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> Cryptography -> MSCEP -> EnforcePassword`.\n+\n+Change the value of `EnforcePassword` to `0` (default is `1`).\n+\n+Extend URL length for the request\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+Best practices recommand to extend the URL length to avoid issue with longer request. \n+\n+To do so, enter the following command in the CLI on the NDES server:\n+\n+ %systemroot%\\system32\\inetsrv\\appcmd.exe set config /section:system.webServer/\n+ security/requestFiltering /requestLimits.maxQueryString:\"16384\" /commit:apphost\n+\n+Certificate template\n+^^^^^^^^^^^^^^^^^^^^\n+\n+NOTE: Remember that the validity of your CA can impact your whole certificate architecture.\n+\n+The goal is to deliver certificate for `user Authentication`, this means you will need to setup a specific template.\n+\n+First, the certificate template needs at least the following `Enhanced Key Usage` and `Key Usage`:\n+\n+image::docs/images/scep-ms-pki-en-key-usage.png[scaledwidth=\"100%\",alt=\"Mandatory Enhanced Key Usage\"]\n+\n+image::docs/images/scep-ms-pki-key-usage.png[scaledwidth=\"100%\",alt=\"Mandatory Key Usage\"]\n+\n+The next step is to duplicate a template where those `Key Usage`, and `Enhanced Key Usage` are already configured. We advise to duplicate the template `User` and change the necessary settings.\n+\n+To duplicate the template, you need to navigate through `Server Manager -> Roles -> Active Directory Certificates Services -> Certificate templates`. Now right click the template `User` and select `Duplicate this template`.\n+\n+Once duplicated, right click your new template, go to `Properties`. Navigate to the tab `Subject Name`. Make sure to select `Supplied in the request` over `Built from information in Active Directory`, otherwise the requested CN will be overwritten by NDES.\n+\n+To allow NDES to use this template you need to navigate to `Server Manager -> Roles -> Active Directory Certificates Services`, expand `YourServerName`, right click `Certificate template` and choose `New template to issue`, in the list select your newly created template.\n+\n+Now that you choose the template to deliver you need to configure it in the registry.\n+\n+To access the registry editor, press `Start` and type `regedit` in the search bar.\n+\n+While in the registry navigate to `Computer -> HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> Cryptography -> MSCEP`.\n+\n+You should have a list of three keys entries: \n+\n+* EncryptionTemplate,\n+* GeneralPurposeTemplate,\n+* SignatureTemplate.\n+\n+Replace each value with your newly created template. The default value should be `IPSECIntermediateOffline`.\n+\n+At this point, you need to reboot the NDES server to apply changes to the registry.\n+\n+IIS configuration\n+^^^^^^^^^^^^^^^^^\n+\n+The use of SCEP with PacketFence also require a change in the IIS configuration.\n+\n+Navigate to `Server Manager -> Web(IIS)`, expand `Default web site` then select `CertSrv -> mscep`. Select `Authentication`, and double click `Anonymous Authentication`. Make sure that `Application pool identity` is selected.\n+\n+Online Certificate Status Protocol (OCSP)\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+For the configuration of OCSP, the following changes are necessary.\n+\n+First we need to allow the use of the template `OCSPResponseSigning` by the server, to do so navigate to `Server Manager -> Roles -> Active Directory Certificates Services`, expand `YourServerName`, right click `Certificate template` and choose `New template to issue`, in the list select `OCSPResponseSigning`.\n+\n+After the installation of OCSP we need to create a Revocation Configuration.\n+\n+To create the Revocation Configuration navigate to `Server Manager -> Roles -> Active Directory Certificate Services` and expand `OnlineResponder`. Then expand `YourServerName`, right click on Revocation Configuration, select `Add Revocation Configuration`, click `Next`, choose a name for your configuration and click `Next`. \n+\n+Choose `Select a certificate for an existing entreprise CA`, click `Next`. Click `Browse` and find your entreprise CA in the list, select it, click `OK` and then `Next`. Choose `Automatically select a signing certificate`, make sure `Auto-Enroll for an OCSP signing certificate` is selected, then choose the default template of OCSP which is `OCSPResponseSigning` in the drop down list next to `Certificate Template:`. You need to add providers only if you wish to use a CRL in addition to OCSP.\n+\n+Once created, right click the revocation configuration and select `Edit properties`, go to the `Signing` tab, then select `Enable NONCE extension support` then click `OK`.\n+\n+Make sure that your OCSP server appear in the CA settings. Right click your CA, choose `Properties`. Navigate to the tab `Extension`, in the drop down list `Select extension` choose `Authority Information Access (AIA)`. Make sure that you have the following in the list of locations: `http://<ServerDNSName>/OCSP`. \n+\n+If you do not have it, add it via the button `Add...`. In this menu type the `http://` then insert `<ServerDNSName>` and type `/OCSP`, then validate by clicking `OK`. Also verify that `Include in the online certificate status protocol(OCSP) extension` is selected.\n+\n+By default OCSP has a two days delay to refresh it's CRL information. Which means if you revoke a certificate on MSPKI, it will take two days before PacketFence detects the certificate is revoked. If this delay is too long for your needs, you can change it on the NDES server. To do so, navigate to `Server Manager -> Roles -> Active Directory Certificate Service` and right click `Entreprise PKI`, in the menu select `Options...`. The delay can be changed by modifying the value of `Set CRL status to Expiring when expiring in:` to your convenience.\n+\n+\n+RADIUS Certificate generation\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+Using the PKI of Microsoft include that all your certificates will be deliver by the root CA of MSPKI. The public key of this certificate is necessary on PacketFence. \n+\n+As for RADIUS authentication you will need to generate a certificate for PacketFence.\n+\n+To generate the RADIUS certificate, the template `WebServer` will be used.\n+\n+The next step is to create the request (CSR), a private key from the PacketFence server and submit the CSR to the NDES server. Connect to PacketFence via ssh and type the following in the CLI to generate the CSR and sign it with the private key:\n+\n+ openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr\n+\n+You will be prompt for some information, here is an example of a valid configuration.\n+\n+* CN=packetfence.local\n+* C=CA\n+* ST=QC\n+* Locality=Montreal\n+* Organization=Inverse\n+* Organization Unit=IT\n+\n+No fields are mandatory other than the CN.\n+\n+Once you have your CSR you will submit it to the NDES server.\n+\n+To submit the request you need to copy the content of the request (.CSR) on the MSPKI enrollment website. The url to input the request will be:","path":"docs/PacketFence_MSPKI_Quick_Install_Guide.asciidoc","position":167,"original_position":167,"commit_id":"2ce3d066f6dc4d53fb83db8249e7cd4d3d2cb17e","original_commit_id":"2ce3d066f6dc4d53fb83db8249e7cd4d3d2cb17e","user":{"login":"julsemaan","id":3857942,"avatar_url":"https://avatars.githubusercontent.com/u/3857942?v=3","gravatar_id":"","url":"https://api.github.com/users/julsemaan","html_url":"https://github.com/julsemaan","followers_url":"https://api.github.com/users/julsemaan/followers","following_url":"https://api.github.com/users/julsemaan/following{/other_user}","gists_url":"https://api.github.com/users/julsemaan/gists{/gist_id}","starred_url":"https://api.github.com/users/julsemaan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julsemaan/subscriptions","organizations_url":"https://api.github.com/users/julsemaan/orgs","repos_url":"https://api.github.com/users/julsemaan/repos","events_url":"https://api.github.com/users/julsemaan/events{/privacy}","received_events_url":"https://api.github.com/users/julsemaan/received_events","type":"User","site_admin":false},"body":"*URL","created_at":"2015-08-10T21:27:40Z","updated_at":"2015-08-10T21:27:40Z","html_url":"https://github.com/inverse-inc/packetfence/pull/810#discussion_r36686912","pull_request_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/810","_links":{"self":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/comments/36686912"},"html":{"href":"https://github.com/inverse-inc/packetfence/pull/810#discussion_r36686912"},"pull_request":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/810"}}},"pull_request":{"url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/810","id":40949046,"html_url":"https://github.com/inverse-inc/packetfence/pull/810","diff_url":"https://github.com/inverse-inc/packetfence/pull/810.diff","patch_url":"https://github.com/inverse-inc/packetfence/pull/810.patch","issue_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/810","number":810,"state":"open","locked":false,"title":"Added MSPKI guide","user":{"login":"whitx","id":9321079,"avatar_url":"https://avatars.githubusercontent.com/u/9321079?v=3","gravatar_id":"","url":"https://api.github.com/users/whitx","html_url":"https://github.com/whitx","followers_url":"https://api.github.com/users/whitx/followers","following_url":"https://api.github.com/users/whitx/following{/other_user}","gists_url":"https://api.github.com/users/whitx/gists{/gist_id}","starred_url":"https://api.github.com/users/whitx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/whitx/subscriptions","organizations_url":"https://api.github.com/users/whitx/orgs","repos_url":"https://api.github.com/users/whitx/repos","events_url":"https://api.github.com/users/whitx/events{/privacy}","received_events_url":"https://api.github.com/users/whitx/received_events","type":"User","site_admin":false},"body":"# Description\r\nDocumentation for MSPKI integration with PacketFence\r\n\r\n# Impacts\r\nNone\r\n\r\n# Dependencies\r\nbranch feature/scep-pki to be merged\r\n\r\n# Delete branch after merge\r\nYES\r\n\r\n# NEWS file entries\r\n* Documentation for the inegration of MSPKI with PacketFence","created_at":"2015-07-27T21:03:04Z","updated_at":"2015-08-10T21:27:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"324ac3464cc6c58cd4800acaa0ee9979da0d8b78","assignee":{"login":"julsemaan","id":3857942,"avatar_url":"https://avatars.githubusercontent.com/u/3857942?v=3","gravatar_id":"","url":"https://api.github.com/users/julsemaan","html_url":"https://github.com/julsemaan","followers_url":"https://api.github.com/users/julsemaan/followers","following_url":"https://api.github.com/users/julsemaan/following{/other_user}","gists_url":"https://api.github.com/users/julsemaan/gists{/gist_id}","starred_url":"https://api.github.com/users/julsemaan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julsemaan/subscriptions","organizations_url":"https://api.github.com/users/julsemaan/orgs","repos_url":"https://api.github.com/users/julsemaan/repos","events_url":"https://api.github.com/users/julsemaan/events{/privacy}","received_events_url":"https://api.github.com/users/julsemaan/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/inverse-inc/packetfence/milestones/9","html_url":"https://github.com/inverse-inc/packetfence/milestones/PacketFence-5.4","labels_url":"https://api.github.com/repos/inverse-inc/packetfence/milestones/9/labels","id":1185948,"number":9,"title":"PacketFence-5.4","description":"","creator":{"login":"louismunro","id":193997,"avatar_url":"https://avatars.githubusercontent.com/u/193997?v=3","gravatar_id":"","url":"https://api.github.com/users/louismunro","html_url":"https://github.com/louismunro","followers_url":"https://api.github.com/users/louismunro/followers","following_url":"https://api.github.com/users/louismunro/following{/other_user}","gists_url":"https://api.github.com/users/louismunro/gists{/gist_id}","starred_url":"https://api.github.com/users/louismunro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/louismunro/subscriptions","organizations_url":"https://api.github.com/users/louismunro/orgs","repos_url":"https://api.github.com/users/louismunro/repos","events_url":"https://api.github.com/users/louismunro/events{/privacy}","received_events_url":"https://api.github.com/users/louismunro/received_events","type":"User","site_admin":false},"open_issues":51,"closed_issues":17,"state":"open","created_at":"2015-06-29T19:23:15Z","updated_at":"2015-08-10T19:23:09Z","due_on":"2015-09-14T04:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/810/commits","review_comments_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/810/comments","review_comment_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls/comments{/number}","comments_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/810/comments","statuses_url":"https://api.github.com/repos/inverse-inc/packetfence/statuses/2ce3d066f6dc4d53fb83db8249e7cd4d3d2cb17e","head":{"label":"inverse-inc:feature/doc-mspki","ref":"feature/doc-mspki","sha":"2ce3d066f6dc4d53fb83db8249e7cd4d3d2cb17e","user":{"login":"inverse-inc","id":1203154,"avatar_url":"https://avatars.githubusercontent.com/u/1203154?v=3","gravatar_id":"","url":"https://api.github.com/users/inverse-inc","html_url":"https://github.com/inverse-inc","followers_url":"https://api.github.com/users/inverse-inc/followers","following_url":"https://api.github.com/users/inverse-inc/following{/other_user}","gists_url":"https://api.github.com/users/inverse-inc/gists{/gist_id}","starred_url":"https://api.github.com/users/inverse-inc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inverse-inc/subscriptions","organizations_url":"https://api.github.com/users/inverse-inc/orgs","repos_url":"https://api.github.com/users/inverse-inc/repos","events_url":"https://api.github.com/users/inverse-inc/events{/privacy}","received_events_url":"https://api.github.com/users/inverse-inc/received_events","type":"Organization","site_admin":false},"repo":{"id":3595658,"name":"packetfence","full_name":"inverse-inc/packetfence","owner":{"login":"inverse-inc","id":1203154,"avatar_url":"https://avatars.githubusercontent.com/u/1203154?v=3","gravatar_id":"","url":"https://api.github.com/users/inverse-inc","html_url":"https://github.com/inverse-inc","followers_url":"https://api.github.com/users/inverse-inc/followers","following_url":"https://api.github.com/users/inverse-inc/following{/other_user}","gists_url":"https://api.github.com/users/inverse-inc/gists{/gist_id}","starred_url":"https://api.github.com/users/inverse-inc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inverse-inc/subscriptions","organizations_url":"https://api.github.com/users/inverse-inc/orgs","repos_url":"https://api.github.com/users/inverse-inc/repos","events_url":"https://api.github.com/users/inverse-inc/events{/privacy}","received_events_url":"https://api.github.com/users/inverse-inc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/inverse-inc/packetfence","description":"PacketFence is a fully supported, trusted, Free and Open Source network access control (NAC) solution. Boasting an impressive feature set including a captive-portal for registration and remediation, centralized wired and wireless management, powerful guest management options, 802.1X support, layer-2 isolation of problematic devices; PacketFence can be used to effectively secure networks small to very large heterogeneous networks.","fork":false,"url":"https://api.github.com/repos/inverse-inc/packetfence","forks_url":"https://api.github.com/repos/inverse-inc/packetfence/forks","keys_url":"https://api.github.com/repos/inverse-inc/packetfence/keys{/key_id}","collaborators_url":"https://api.github.com/repos/inverse-inc/packetfence/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/inverse-inc/packetfence/teams","hooks_url":"https://api.github.com/repos/inverse-inc/packetfence/hooks","issue_events_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/events{/number}","events_url":"https://api.github.com/repos/inverse-inc/packetfence/events","assignees_url":"https://api.github.com/repos/inverse-inc/packetfence/assignees{/user}","branches_url":"https://api.github.com/repos/inverse-inc/packetfence/branches{/branch}","tags_url":"https://api.github.com/repos/inverse-inc/packetfence/tags","blobs_url":"https://api.github.com/repos/inverse-inc/packetfence/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/inverse-inc/packetfence/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/inverse-inc/packetfence/git/refs{/sha}","trees_url":"https://api.github.com/repos/inverse-inc/packetfence/git/trees{/sha}","statuses_url":"https://api.github.com/repos/inverse-inc/packetfence/statuses/{sha}","languages_url":"https://api.github.com/repos/inverse-inc/packetfence/languages","stargazers_url":"https://api.github.com/repos/inverse-inc/packetfence/stargazers","contributors_url":"https://api.github.com/repos/inverse-inc/packetfence/contributors","subscribers_url":"https://api.github.com/repos/inverse-inc/packetfence/subscribers","subscription_url":"https://api.github.com/repos/inverse-inc/packetfence/subscription","commits_url":"https://api.github.com/repos/inverse-inc/packetfence/commits{/sha}","git_commits_url":"https://api.github.com/repos/inverse-inc/packetfence/git/commits{/sha}","comments_url":"https://api.github.com/repos/inverse-inc/packetfence/comments{/number}","issue_comment_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/comments{/number}","contents_url":"https://api.github.com/repos/inverse-inc/packetfence/contents/{+path}","compare_url":"https://api.github.com/repos/inverse-inc/packetfence/compare/{base}...{head}","merges_url":"https://api.github.com/repos/inverse-inc/packetfence/merges","archive_url":"https://api.github.com/repos/inverse-inc/packetfence/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/inverse-inc/packetfence/downloads","issues_url":"https://api.github.com/repos/inverse-inc/packetfence/issues{/number}","pulls_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls{/number}","milestones_url":"https://api.github.com/repos/inverse-inc/packetfence/milestones{/number}","notifications_url":"https://api.github.com/repos/inverse-inc/packetfence/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/inverse-inc/packetfence/labels{/name}","releases_url":"https://api.github.com/repos/inverse-inc/packetfence/releases{/id}","created_at":"2012-03-01T20:21:13Z","updated_at":"2015-08-04T14:25:03Z","pushed_at":"2015-08-10T19:23:10Z","git_url":"git://github.com/inverse-inc/packetfence.git","ssh_url":"git@github.com:inverse-inc/packetfence.git","clone_url":"https://github.com/inverse-inc/packetfence.git","svn_url":"https://github.com/inverse-inc/packetfence","homepage":"http://www.packetfence.org","size":164991,"stargazers_count":129,"watchers_count":129,"language":"Perl","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":68,"mirror_url":null,"open_issues_count":156,"forks":68,"open_issues":156,"watchers":129,"default_branch":"devel"}},"base":{"label":"inverse-inc:devel","ref":"devel","sha":"e9a223927fe2508b8366929e267a5173564e939b","user":{"login":"inverse-inc","id":1203154,"avatar_url":"https://avatars.githubusercontent.com/u/1203154?v=3","gravatar_id":"","url":"https://api.github.com/users/inverse-inc","html_url":"https://github.com/inverse-inc","followers_url":"https://api.github.com/users/inverse-inc/followers","following_url":"https://api.github.com/users/inverse-inc/following{/other_user}","gists_url":"https://api.github.com/users/inverse-inc/gists{/gist_id}","starred_url":"https://api.github.com/users/inverse-inc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inverse-inc/subscriptions","organizations_url":"https://api.github.com/users/inverse-inc/orgs","repos_url":"https://api.github.com/users/inverse-inc/repos","events_url":"https://api.github.com/users/inverse-inc/events{/privacy}","received_events_url":"https://api.github.com/users/inverse-inc/received_events","type":"Organization","site_admin":false},"repo":{"id":3595658,"name":"packetfence","full_name":"inverse-inc/packetfence","owner":{"login":"inverse-inc","id":1203154,"avatar_url":"https://avatars.githubusercontent.com/u/1203154?v=3","gravatar_id":"","url":"https://api.github.com/users/inverse-inc","html_url":"https://github.com/inverse-inc","followers_url":"https://api.github.com/users/inverse-inc/followers","following_url":"https://api.github.com/users/inverse-inc/following{/other_user}","gists_url":"https://api.github.com/users/inverse-inc/gists{/gist_id}","starred_url":"https://api.github.com/users/inverse-inc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inverse-inc/subscriptions","organizations_url":"https://api.github.com/users/inverse-inc/orgs","repos_url":"https://api.github.com/users/inverse-inc/repos","events_url":"https://api.github.com/users/inverse-inc/events{/privacy}","received_events_url":"https://api.github.com/users/inverse-inc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/inverse-inc/packetfence","description":"PacketFence is a fully supported, trusted, Free and Open Source network access control (NAC) solution. Boasting an impressive feature set including a captive-portal for registration and remediation, centralized wired and wireless management, powerful guest management options, 802.1X support, layer-2 isolation of problematic devices; PacketFence can be used to effectively secure networks small to very large heterogeneous networks.","fork":false,"url":"https://api.github.com/repos/inverse-inc/packetfence","forks_url":"https://api.github.com/repos/inverse-inc/packetfence/forks","keys_url":"https://api.github.com/repos/inverse-inc/packetfence/keys{/key_id}","collaborators_url":"https://api.github.com/repos/inverse-inc/packetfence/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/inverse-inc/packetfence/teams","hooks_url":"https://api.github.com/repos/inverse-inc/packetfence/hooks","issue_events_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/events{/number}","events_url":"https://api.github.com/repos/inverse-inc/packetfence/events","assignees_url":"https://api.github.com/repos/inverse-inc/packetfence/assignees{/user}","branches_url":"https://api.github.com/repos/inverse-inc/packetfence/branches{/branch}","tags_url":"https://api.github.com/repos/inverse-inc/packetfence/tags","blobs_url":"https://api.github.com/repos/inverse-inc/packetfence/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/inverse-inc/packetfence/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/inverse-inc/packetfence/git/refs{/sha}","trees_url":"https://api.github.com/repos/inverse-inc/packetfence/git/trees{/sha}","statuses_url":"https://api.github.com/repos/inverse-inc/packetfence/statuses/{sha}","languages_url":"https://api.github.com/repos/inverse-inc/packetfence/languages","stargazers_url":"https://api.github.com/repos/inverse-inc/packetfence/stargazers","contributors_url":"https://api.github.com/repos/inverse-inc/packetfence/contributors","subscribers_url":"https://api.github.com/repos/inverse-inc/packetfence/subscribers","subscription_url":"https://api.github.com/repos/inverse-inc/packetfence/subscription","commits_url":"https://api.github.com/repos/inverse-inc/packetfence/commits{/sha}","git_commits_url":"https://api.github.com/repos/inverse-inc/packetfence/git/commits{/sha}","comments_url":"https://api.github.com/repos/inverse-inc/packetfence/comments{/number}","issue_comment_url":"https://api.github.com/repos/inverse-inc/packetfence/issues/comments{/number}","contents_url":"https://api.github.com/repos/inverse-inc/packetfence/contents/{+path}","compare_url":"https://api.github.com/repos/inverse-inc/packetfence/compare/{base}...{head}","merges_url":"https://api.github.com/repos/inverse-inc/packetfence/merges","archive_url":"https://api.github.com/repos/inverse-inc/packetfence/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/inverse-inc/packetfence/downloads","issues_url":"https://api.github.com/repos/inverse-inc/packetfence/issues{/number}","pulls_url":"https://api.github.com/repos/inverse-inc/packetfence/pulls{/number}","milestones_url":"https://api.github.com/repos/inverse-inc/packetfence/milestones{/number}","notifications_url":"https://api.github.com/repos/inverse-inc/packetfence/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/inverse-inc/packetfence/labels{/name}","releases_url":"https://api.github.com/repos/inverse-inc/packetfence/releases{/id}","created_at":"2012-03-01T20:21:13Z","updated_at":"2015-08-04T14:25:03Z","pushed_at":"2015-08-10T19:23:10Z","git_url":"git://github.com/inverse-inc/packetfence.git","ssh_url":"git@github.com:inverse-inc/packetfence.git","clone_url":"https://github.com/inverse-inc/packetfence.git","svn_url":"https://github.com/inverse-inc/packetfence","homepage":"http://www.packetfence.org","size":164991,"stargazers_count":129,"watchers_count":129,"language":"Perl","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":68,"mirror_url":null,"open_issues_count":156,"forks":68,"open_issues":156,"watchers":129,"default_branch":"devel"}},"_links":{"self":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/810"},"html":{"href":"https://github.com/inverse-inc/packetfence/pull/810"},"issue":{"href":"https://api.github.com/repos/inverse-inc/packetfence/issues/810"},"comments":{"href":"https://api.github.com/repos/inverse-inc/packetfence/issues/810/comments"},"review_comments":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/810/comments"},"review_comment":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/inverse-inc/packetfence/pulls/810/commits"},"statuses":{"href":"https://api.github.com/repos/inverse-inc/packetfence/statuses/2ce3d066f6dc4d53fb83db8249e7cd4d3d2cb17e"}}}}