Hi Edward,

Thank you for your reply.  You are indeed correct that I do not understand much 
at all about this.  This is one of those topics where I learn a bunch, don't 
use it for a few years (or much longer) and then revisit it only to learn that 
I have forgotten it all. :)

In this case, I am not only learning self-signing certificates (and all of 
their implications), but I am also learning about the Azure Key Vault, which 
suggests using certificates in addition to sending a client id when making 
requests.  You can see more about this here with a sample article:
https://github.com/Azure/azure-content/blob/master/articles/key-vault/key-vault-use-from-web-application.md#authenticate-with-a-certificate-instead-of-a-client-secret

The root of the problem I am trying to solve is that I do not want to check in 
sensitive information into (public, ala github) source control, but yet have an 
elegant system that allows me to retrieve necessary data for both local 
development and for production environments.

The path I *was* taking was to generate self-signed certificates that also have 
additional needed information embedded in the certificate's extensions.  
Additional information would be the client ID as mentioned above along with the 
root URL in which the vault is stored.  As you state, this is something that is 
personal to my process and would not be shared online.  

The problem I am facing now is that I do not know if creating a new certificate 
extension is the best guidance. :D

Additionally, I found out this morning after some digging that Azure provides 
"Application Settings" that replace configuration settings provided with the 
app.config after deployment.  In my case, the application I am running is a 
Console Application.  While I knew that "Application Settings" worked for Web 
Applications (web.config), I did not know that you can also deploy a Console 
Application as an Azure Web Job and get the same benefits. It will also account 
for the App.config -> Web.config conversion as well.  You can see more here: 
https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-deploy-webjobs/

Anyways, long story short here... I think I have what I need to continue with 
the core problem, but it is nice to know I have a resource here and also with 
the link you suggest below, which I will definitely use going forward. :)

Thank you for your advice and feedback!
Michael

-----Original Message-----
From: Edward Ned Harvey (bouncycastle) [mailto:bouncycas...@nedharvey.com] 
Sent: Monday, February 22, 2016 8:41 AM
To: Michael DeMond <mich...@dragonspark.us>; dev-crypto-csharp@bouncycastle.org
Subject: RE: Dynamically Signing X509 Certificates at Runtime

> From: Michael DeMond [mailto:mich...@dragonspark.us]
> 
> Apologies if I have or am already breaking any sort of rules and/or 
> protocol here in reaching out to you here.

Your email is completely appropriate here. There is also a strong community on 
stackoverflow, and http://crypto.stackexchange.com/


> Anyways, my question is actually the same as the question asked within 
> the comments of this blog post, and that is: is it possible to 
> generate a certificate from a provided CA root certificate?  I am 
> learning about all of this, and I
> *mostly* have things working in the test environment, but at some 
> point I will have to put the big boy pants on, and use a trusted 
> certificate from an external source (from what I understand).  Will I 
> be able to use this approach with that certificate?

Unless I miss my guess, you seem to not really understand how certificates 
work, or even, what exactly they are. My first response is to say:

If what you want is the academic learning experience, start by reading 
Cryptography Engineering, and/or attend an intro to cryptography class. There 
is a free video course on coursera, and probably other locations too. I've done 
both of these, and personally I think the book is better, but the coursera 
class is also very good.

If your goal is to use something practical, rather than learn everything about 
cryptography, you should probably just get a real cert from a trusted CA. Free 
certs are available from https://startssl.com or https://letsencrypt.org. There 
are also various low-cost cert providers (like $11/yr) for example 
https://namecheap.com.

You can create a self-signed cert, but then you should never expose it to the 
internet, so what's the point. If you know enough to tell me the nuances of 
when it would be ok and my overly broad generalized statement here is wrong - 
then you wouldn't be asking this question.  ;-)

You can create your own private CA, and build and deploy a private key 
infrastructure (PKI), but if you want to do this, you really should have a 
solid understanding of cryptography first. It's a lot of work, very complex, 
with lots of ways to shoot yourself. Most likely you wouldn't do that in a 
programming language such as C#; most likely you would use some preexisting 
tools such as openssl.

Reply via email to