Must server and client certificate be signed by same CA in SSL










0















I am trying to understand the relationship between the client and server in the context of an SSL connection. Am I correct in understanding that the fact that the same certificate authority (me - in example below) sign both server and client certificate makes that they can communicate. Thus, that the server only accepts communication when client authenticates with client certificate signed by the same CA as the server certificate, and this is essential to the idea of an SSL connection?



(script underneath comes directly from http://blog.nategood.com/client-side-certificate-authentication-in-ngi)



# Create the CA Key and Certificate for signing Client Certs
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

# Create the Server Key, CSR, and Certificate
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr

# We're self signing our own server cert here. This is a no-no in production.
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

# Create the Client Key and CSR
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr

# Sign the client certificate with our CA cert. Unlike signing our own server cert, this is what we want to do.
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

server {
listen 443;
ssl on;
server_name example.com;

ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_client_certificate /etc/nginx/certs/ca.crt;
ssl_verify_client on;









share|improve this question

















  • 1





    No. The client needs to trust the CA that signed the server certificate and the server needs to trust the CA that signed the client certificate.

    – Richard Smith
    Nov 12 '18 at 18:47











  • But is it possible to setup a connection using server and client certificate that are signed by a different CA? So, when client en server cert. share nothing in common...

    – Niels
    Nov 12 '18 at 18:56











  • How is that 'trust' visible in the scipts I presented?

    – Niels
    Nov 12 '18 at 18:57






  • 1





    Same CA, different CA, makes no difference. The ssl_client_certificate directive tells the server which client CA to trust and the browser's certificate manager contains all of the server CAs that the browser trusts.

    – Richard Smith
    Nov 12 '18 at 20:15















0















I am trying to understand the relationship between the client and server in the context of an SSL connection. Am I correct in understanding that the fact that the same certificate authority (me - in example below) sign both server and client certificate makes that they can communicate. Thus, that the server only accepts communication when client authenticates with client certificate signed by the same CA as the server certificate, and this is essential to the idea of an SSL connection?



(script underneath comes directly from http://blog.nategood.com/client-side-certificate-authentication-in-ngi)



# Create the CA Key and Certificate for signing Client Certs
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

# Create the Server Key, CSR, and Certificate
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr

# We're self signing our own server cert here. This is a no-no in production.
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

# Create the Client Key and CSR
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr

# Sign the client certificate with our CA cert. Unlike signing our own server cert, this is what we want to do.
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

server {
listen 443;
ssl on;
server_name example.com;

ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_client_certificate /etc/nginx/certs/ca.crt;
ssl_verify_client on;









share|improve this question

















  • 1





    No. The client needs to trust the CA that signed the server certificate and the server needs to trust the CA that signed the client certificate.

    – Richard Smith
    Nov 12 '18 at 18:47











  • But is it possible to setup a connection using server and client certificate that are signed by a different CA? So, when client en server cert. share nothing in common...

    – Niels
    Nov 12 '18 at 18:56











  • How is that 'trust' visible in the scipts I presented?

    – Niels
    Nov 12 '18 at 18:57






  • 1





    Same CA, different CA, makes no difference. The ssl_client_certificate directive tells the server which client CA to trust and the browser's certificate manager contains all of the server CAs that the browser trusts.

    – Richard Smith
    Nov 12 '18 at 20:15













0












0








0








I am trying to understand the relationship between the client and server in the context of an SSL connection. Am I correct in understanding that the fact that the same certificate authority (me - in example below) sign both server and client certificate makes that they can communicate. Thus, that the server only accepts communication when client authenticates with client certificate signed by the same CA as the server certificate, and this is essential to the idea of an SSL connection?



(script underneath comes directly from http://blog.nategood.com/client-side-certificate-authentication-in-ngi)



# Create the CA Key and Certificate for signing Client Certs
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

# Create the Server Key, CSR, and Certificate
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr

# We're self signing our own server cert here. This is a no-no in production.
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

# Create the Client Key and CSR
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr

# Sign the client certificate with our CA cert. Unlike signing our own server cert, this is what we want to do.
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

server {
listen 443;
ssl on;
server_name example.com;

ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_client_certificate /etc/nginx/certs/ca.crt;
ssl_verify_client on;









share|improve this question














I am trying to understand the relationship between the client and server in the context of an SSL connection. Am I correct in understanding that the fact that the same certificate authority (me - in example below) sign both server and client certificate makes that they can communicate. Thus, that the server only accepts communication when client authenticates with client certificate signed by the same CA as the server certificate, and this is essential to the idea of an SSL connection?



(script underneath comes directly from http://blog.nategood.com/client-side-certificate-authentication-in-ngi)



# Create the CA Key and Certificate for signing Client Certs
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

# Create the Server Key, CSR, and Certificate
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr

# We're self signing our own server cert here. This is a no-no in production.
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

# Create the Client Key and CSR
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr

# Sign the client certificate with our CA cert. Unlike signing our own server cert, this is what we want to do.
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

server {
listen 443;
ssl on;
server_name example.com;

ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_client_certificate /etc/nginx/certs/ca.crt;
ssl_verify_client on;






ssl nginx openssl ca






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 12 '18 at 18:14









NielsNiels

14510




14510







  • 1





    No. The client needs to trust the CA that signed the server certificate and the server needs to trust the CA that signed the client certificate.

    – Richard Smith
    Nov 12 '18 at 18:47











  • But is it possible to setup a connection using server and client certificate that are signed by a different CA? So, when client en server cert. share nothing in common...

    – Niels
    Nov 12 '18 at 18:56











  • How is that 'trust' visible in the scipts I presented?

    – Niels
    Nov 12 '18 at 18:57






  • 1





    Same CA, different CA, makes no difference. The ssl_client_certificate directive tells the server which client CA to trust and the browser's certificate manager contains all of the server CAs that the browser trusts.

    – Richard Smith
    Nov 12 '18 at 20:15












  • 1





    No. The client needs to trust the CA that signed the server certificate and the server needs to trust the CA that signed the client certificate.

    – Richard Smith
    Nov 12 '18 at 18:47











  • But is it possible to setup a connection using server and client certificate that are signed by a different CA? So, when client en server cert. share nothing in common...

    – Niels
    Nov 12 '18 at 18:56











  • How is that 'trust' visible in the scipts I presented?

    – Niels
    Nov 12 '18 at 18:57






  • 1





    Same CA, different CA, makes no difference. The ssl_client_certificate directive tells the server which client CA to trust and the browser's certificate manager contains all of the server CAs that the browser trusts.

    – Richard Smith
    Nov 12 '18 at 20:15







1




1





No. The client needs to trust the CA that signed the server certificate and the server needs to trust the CA that signed the client certificate.

– Richard Smith
Nov 12 '18 at 18:47





No. The client needs to trust the CA that signed the server certificate and the server needs to trust the CA that signed the client certificate.

– Richard Smith
Nov 12 '18 at 18:47













But is it possible to setup a connection using server and client certificate that are signed by a different CA? So, when client en server cert. share nothing in common...

– Niels
Nov 12 '18 at 18:56





But is it possible to setup a connection using server and client certificate that are signed by a different CA? So, when client en server cert. share nothing in common...

– Niels
Nov 12 '18 at 18:56













How is that 'trust' visible in the scipts I presented?

– Niels
Nov 12 '18 at 18:57





How is that 'trust' visible in the scipts I presented?

– Niels
Nov 12 '18 at 18:57




1




1





Same CA, different CA, makes no difference. The ssl_client_certificate directive tells the server which client CA to trust and the browser's certificate manager contains all of the server CAs that the browser trusts.

– Richard Smith
Nov 12 '18 at 20:15





Same CA, different CA, makes no difference. The ssl_client_certificate directive tells the server which client CA to trust and the browser's certificate manager contains all of the server CAs that the browser trusts.

– Richard Smith
Nov 12 '18 at 20:15












1 Answer
1






active

oldest

votes


















1














The short answer is No. These are two separate aspects.
Here:



ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;


You are configuring the server certificates which need to be trusted by the client.
Here:



ssl_client_certificate /etc/nginx/certs/ca.crt;


You configure the certification authority to verify your clients' certificates against.






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53267866%2fmust-server-and-client-certificate-be-signed-by-same-ca-in-ssl%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    The short answer is No. These are two separate aspects.
    Here:



    ssl_certificate /etc/nginx/certs/server.crt;
    ssl_certificate_key /etc/nginx/certs/server.key;


    You are configuring the server certificates which need to be trusted by the client.
    Here:



    ssl_client_certificate /etc/nginx/certs/ca.crt;


    You configure the certification authority to verify your clients' certificates against.






    share|improve this answer



























      1














      The short answer is No. These are two separate aspects.
      Here:



      ssl_certificate /etc/nginx/certs/server.crt;
      ssl_certificate_key /etc/nginx/certs/server.key;


      You are configuring the server certificates which need to be trusted by the client.
      Here:



      ssl_client_certificate /etc/nginx/certs/ca.crt;


      You configure the certification authority to verify your clients' certificates against.






      share|improve this answer

























        1












        1








        1







        The short answer is No. These are two separate aspects.
        Here:



        ssl_certificate /etc/nginx/certs/server.crt;
        ssl_certificate_key /etc/nginx/certs/server.key;


        You are configuring the server certificates which need to be trusted by the client.
        Here:



        ssl_client_certificate /etc/nginx/certs/ca.crt;


        You configure the certification authority to verify your clients' certificates against.






        share|improve this answer













        The short answer is No. These are two separate aspects.
        Here:



        ssl_certificate /etc/nginx/certs/server.crt;
        ssl_certificate_key /etc/nginx/certs/server.key;


        You are configuring the server certificates which need to be trusted by the client.
        Here:



        ssl_client_certificate /etc/nginx/certs/ca.crt;


        You configure the certification authority to verify your clients' certificates against.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 13 '18 at 1:28









        Nikolay DimitrovNikolay Dimitrov

        871811




        871811



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53267866%2fmust-server-and-client-certificate-be-signed-by-same-ca-in-ssl%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Kleinkühnau

            Makov (Slowakei)

            Deutsches Schauspielhaus